visitConsoleCSProj()

in lib/generator.js [2780:2834]


  visitConsoleCSProj(uniqueUsed) {
    let csprojPath = path.join(this.csprojOutputDir, (this.config.packageInfo.name || 'client') + '.csproj');
    let json = {};
    json = parse(fs.readFileSync(path.join(__dirname, 'files', 'consoleCsproj.tmpl')));
    //填写包的基本信息
    let propertyGroup = json.Project.PropertyGroup;
    propertyGroup.forEach((property) => {
      if (Object.hasOwn(property, 'RootNamespace')) {
        property['RootNamespace'] = this.config.namespace;
      }
    });

    let dependenciesClass = [];
    if (uniqueUsed.includes('Newtonsoft.Json')) {
      dependenciesClass.push('Newtonsoft.Json:13.0.1');
    }
    Object.keys(this.imports).forEach((key) => {
      dependenciesClass.push(this.imports[key].release);
    });
    // 兜底依赖 Darabonba 的 1.0.0 版本
    const teaVersion = '1.0.0';
    dependenciesClass.push(`Darabonba:${teaVersion}`);

    let currentItemGroup = {};
    dependenciesClass.forEach((item, index) => {
      let dependency = item.split(':');
      currentItemGroup[dependency[0]] = dependency[1];
    });
    const newItemGroup = { ...currentItemGroup, ...this.packageManager };

    //寻找用来写入的itemGroup, 避开有特殊参数的itemGroup
    let itemGroup = {};

    //添加或更新依赖包
    Object.entries(newItemGroup || {}).forEach(([key, value]) => {
      let writeReference = {};
      itemGroup.PackageReference = itemGroup.PackageReference || [];
      writeReference.$ = { 'Include': key, 'Version': value };
      itemGroup.PackageReference.push(writeReference);
    });

    if (this.typedef) {
      Object.keys(this.typedef).map(key => {
        if (!this.typedef[key].package) {
          return;
        }
        dependenciesClass.push(this.typedef[key].package);
      });
    }

    json.Project.ItemGroup = itemGroup;
    const builder = new xml2js.Builder();
    const newCsproj = builder.buildObject(json);
    fs.writeFileSync(csprojPath, Entities.decode(newCsproj));
  }