Microsoft.Build.Evaluation.Project以编程方式将resx文件添加到.net核心项目文件(csproj)

时间:2019-10-30 07:56:07

标签: c# .net

我有一个asp .net核心项目文件(csproj)。我正在尝试以编程方式向项目添加一些资源文件(resx)。要添加我正在使用的块金Microsoft.Build 16.3.0,请添加资源 我要在其中修改项目文件的应用程序是.net 4.7 它几乎可以完美运行,但是有1个问题,我无法解决。

当我以编程方式在xml中插入新的ProjectItem时,它具有属性Include(编译Include =…)。由Visual Studio添加时,其属性为更新(Compile Update =…) 当我尝试编译项目时,错误是:
包括重复的“编译”项。默认情况下,.NET SDK包含项目目录中的“编译”项。您可以从项目文件中删除这些项目,也可以将“ EnableDefaultCompileItems”属性设置为“ false”(如果要在项目文件中明确包含这些项目)。有关更多信息,请参见https://aka.ms/sdkimplicititems

要添加到项目中的代码如下:

project = new Project(CsProjectFullFileName);
List<KeyValuePair<string, string>> metadataList = new List<KeyValuePair<string, string>>();
metadataList.Add(new KeyValuePair<string, string>("SubType", "Designer"));
metadataList.Add(new KeyValuePair<string, string>("LastGenOutput", Path.GetFileName(designerFullFileName)));
metadataList.Add(new KeyValuePair<string, string>("Generator", "ResXFileCodeGenerator"));
project.AddItem("EmbeddedResource", relativeResxName, metadataList);

string relativeDesignerName = HelperMethodesTimeJobMasken.GetRelativePath(designerFullFileName, CsProjectPath);

metadataList = new List<KeyValuePair<string, string>>();
metadataList.Add(new KeyValuePair<string, string>("DesignTime", "True"));
metadataList.Add(new KeyValuePair<string, string>("AutoGen", "True"));
metadataList.Add(new KeyValuePair<string, string>("DependentUpon", Path.GetFileName(resxFullFileName)));
project.AddItem("Compile", relativeDesignerName, metadataList);

项目文件如下:

Visual Studio添加了“ PersonalienSqlQueries.resx” 以编程方式添加“ Personalien2SqlRes.resx”。

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <DockerTargetOS>Windows</DockerTargetOS>
  </PropertyGroup>
 
...
 
  <ItemGroup>
    <EmbeddedResource Include="DataBase\Context\Personal\Personalien2\Personalien2SqlRes.resx">
      <SubType>Designer</SubType>
      <LastGenOutput>Personalien2SqlRes.Designer.cs</LastGenOutput>
      <Generator>ResXFileCodeGenerator</Generator>
    </EmbeddedResource>
  </ItemGroup>
  <ItemGroup>
    <Compile Update="DataBase\Context\Personal\Personalien\PersonalienSqlQueries.Designer.cs">
      <DependentUpon>PersonalienSqlQueries.resx</DependentUpon>
      <DesignTime>True</DesignTime>
      <AutoGen>True</AutoGen>
    </Compile>
    <Compile Include="DataBase\Context\Personal\Personalien2\Personalien2SqlRes.Designer.cs">
      <DesignTime>True</DesignTime>
      <AutoGen>True</AutoGen>
      <DependentUpon>Personalien2SqlRes.resx</DependentUpon>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <EmbeddedResource Update="DataBase\Context\Personal\Personalien\PersonalienSqlQueries.resx">
      <SubType>Designer</SubType>
      <LastGenOutput>PersonalienSqlQueries.Designer.cs</LastGenOutput>
      <Generator>ResXFileCodeGenerator</Generator>
    </EmbeddedResource>
    ....
  </ItemGroup>
....
</Project>

0 个答案:

没有答案