如何让网络核心项目包含自动生成的代码文件?
How to get net-core projects to include auto generated code file?
我有一个 .net 核心项目文件 (*.csproj),如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
<!-- Create RS.cs -->
<ItemGroup>
<ResourceGeneratorInputs Include="strings.resx" />
<ResourceGeneratorOutputs Include="RS.cs" />
</ItemGroup>
<Target Name="GenerateTheResourceFile"
BeforeTargets="PrepareForBuild"
Inputs="@(ResourceGeneratorInputs)"
Outputs="@(ResourceGeneratorOutputs)">
<Exec Command="ResourceStringGenerator.exe strings.resx RS.cs " />
</Target>
</Project>
此项目有一个生成名为 RS.cs 的 csharp 代码文件的目标,该文件也必须编译。
问题是文件生成的太晚了。构建引擎已经读取项目目录中的文件列表,RS.cs 文件被忽略。
我曾尝试将 BeforeTargets 属性更改为各种其他目标,但都没有成功。 (此处描述:https://docs.microsoft.com/en-us/dotnet/core/tools/csproj#build-events)
我也试过关闭自动包含文件:
<PropertyGroup>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>
并制作我自己的要编译的文件列表。但这也没有用。 RS.cs 文件仍然生成得太晚。
新的项目文件格式似乎急于获取文件列表,似乎没有给自动生成的文件留下空间。
这里有什么解决方法?
项目文件的静态部分总是在目标 运行 之前计算。
但是,您也可以在目标中添加项目:
<Target Name="GenerateTheResourceFile"
BeforeTargets="PrepareForBuild"
Inputs="@(ResourceGeneratorInputs)"
Outputs="@(ResourceGeneratorOutputs)">
<Exec Command="ResourceStringGenerator.exe strings.resx RS.cs " />
<ItemGroup>
<EmbeddedResource Include="strings.resx" Exclude="@(EmbeddedResource)" />
<Compile Include="RS.cs" Exclude="@(Compile)" />
</ItemGroup>
</Target>
"exclude" 部分确保如果文件已经在静态评估期间被拾取(即额外构建),则该文件不会被添加两次
我有一个 .net 核心项目文件 (*.csproj),如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
<!-- Create RS.cs -->
<ItemGroup>
<ResourceGeneratorInputs Include="strings.resx" />
<ResourceGeneratorOutputs Include="RS.cs" />
</ItemGroup>
<Target Name="GenerateTheResourceFile"
BeforeTargets="PrepareForBuild"
Inputs="@(ResourceGeneratorInputs)"
Outputs="@(ResourceGeneratorOutputs)">
<Exec Command="ResourceStringGenerator.exe strings.resx RS.cs " />
</Target>
</Project>
此项目有一个生成名为 RS.cs 的 csharp 代码文件的目标,该文件也必须编译。
问题是文件生成的太晚了。构建引擎已经读取项目目录中的文件列表,RS.cs 文件被忽略。
我曾尝试将 BeforeTargets 属性更改为各种其他目标,但都没有成功。 (此处描述:https://docs.microsoft.com/en-us/dotnet/core/tools/csproj#build-events) 我也试过关闭自动包含文件:
<PropertyGroup>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>
并制作我自己的要编译的文件列表。但这也没有用。 RS.cs 文件仍然生成得太晚。
新的项目文件格式似乎急于获取文件列表,似乎没有给自动生成的文件留下空间。
这里有什么解决方法?
项目文件的静态部分总是在目标 运行 之前计算。 但是,您也可以在目标中添加项目:
<Target Name="GenerateTheResourceFile"
BeforeTargets="PrepareForBuild"
Inputs="@(ResourceGeneratorInputs)"
Outputs="@(ResourceGeneratorOutputs)">
<Exec Command="ResourceStringGenerator.exe strings.resx RS.cs " />
<ItemGroup>
<EmbeddedResource Include="strings.resx" Exclude="@(EmbeddedResource)" />
<Compile Include="RS.cs" Exclude="@(Compile)" />
</ItemGroup>
</Target>
"exclude" 部分确保如果文件已经在静态评估期间被拾取(即额外构建),则该文件不会被添加两次