我有一个.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文件的时间仍然太晚。
新的项目文件格式似乎非常渴望获得文件列表,以至于似乎没有为自动生成的文件留出空间。
这里的工作是什么?
发布于 2020-01-15 01:26:15
项目文件的静态部分总是在目标运行之前进行评估。但是,您也可以在目标中添加项目:
<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>“排除”部分确保如果文件在静态评估(即附加构建)过程中已被拾取,则不会添加两次。
https://stackoverflow.com/questions/59738719
复制相似问题