在 .csproj class 库中自动嵌套文件 (DependentUpon)
Automatically nest files in .csproj class libary (DependentUpon)
我正在生成许多 C# 文件。我希望它们自动嵌套在 Visual Studio 解决方案资源管理器中匹配的 C# 文件下。例如,Foo.Generated.cs 和 Bar.Generated.cs 将分别嵌套在 Foo.cs 和 Bar.cs 下。
如果可能,我希望能够在我的 Directory.Build.props 文件中进行管理,这样我解决方案中的所有 class 库都将具有相同的行为。
版本
- .NET 核心 3.1
- Visual Studio 2019 (16.5.3)
尝试 A 失败:
<Compile Update="**\*Generated.cs">
<DependentUpon>$([System.String]::Copy(%(Filename)).Replace('.Generated', '.cs'))</DependentUpon>
</Compile>
尝试 B 失败:
<Compile Update="**\*Generated.cs">
<DependentUpon>%(Filename)</DependentUpon>
</Compile>
尝试失败 C:
<Compile Update="**\*Generated.cs">
<DependentUpon>%(Filename).cs</DependentUpon>
</Compile>
上述方法也已尝试使用:
<ItemGroup>
<ProjectCapability Include="DynamicDependentFile" />
<ProjectCapability Include="DynamicFileNesting" />
</ItemGroup>
If possible I'd like to be able to manage this in my
Directory.Build.props file, so all the class libraries in my solution
will have the same behavior.
首先,我觉得你应该用Directory.Build.targets
而不是Directory.Build.props
。正如 this document 所示,Directory.Build.props
很早就在 Microsoft.Common.props 中导入,并且在 MSBuild Properties 之后识别 Itemgroup 元素,因此当您在 Directory.Build.props
中添加项目时,这些元素将不会被识别通过 MSBuild。
但是、Directory.Build.targets
导入的很晚,MSBuild 那时已经开始识别它们,有了它,您可以添加任何可以识别的项目那个文件。
解决方案
1) 将文件更改为 Directory.Build.targets
2) 添加这些(你的):
<Compile Update="**\*Generated.cs">
<DependentUpon>$([System.String]::Copy(%(Filename)).Replace('.Generated', '.cs'))</DependentUpon>
</Compile>
在我身边很管用,希望对你有帮助。
我正在生成许多 C# 文件。我希望它们自动嵌套在 Visual Studio 解决方案资源管理器中匹配的 C# 文件下。例如,Foo.Generated.cs 和 Bar.Generated.cs 将分别嵌套在 Foo.cs 和 Bar.cs 下。
如果可能,我希望能够在我的 Directory.Build.props 文件中进行管理,这样我解决方案中的所有 class 库都将具有相同的行为。
版本
- .NET 核心 3.1
- Visual Studio 2019 (16.5.3)
尝试 A 失败:
<Compile Update="**\*Generated.cs">
<DependentUpon>$([System.String]::Copy(%(Filename)).Replace('.Generated', '.cs'))</DependentUpon>
</Compile>
尝试 B 失败:
<Compile Update="**\*Generated.cs">
<DependentUpon>%(Filename)</DependentUpon>
</Compile>
尝试失败 C:
<Compile Update="**\*Generated.cs">
<DependentUpon>%(Filename).cs</DependentUpon>
</Compile>
上述方法也已尝试使用:
<ItemGroup>
<ProjectCapability Include="DynamicDependentFile" />
<ProjectCapability Include="DynamicFileNesting" />
</ItemGroup>
If possible I'd like to be able to manage this in my Directory.Build.props file, so all the class libraries in my solution will have the same behavior.
首先,我觉得你应该用Directory.Build.targets
而不是Directory.Build.props
。正如 this document 所示,Directory.Build.props
很早就在 Microsoft.Common.props 中导入,并且在 MSBuild Properties 之后识别 Itemgroup 元素,因此当您在 Directory.Build.props
中添加项目时,这些元素将不会被识别通过 MSBuild。
但是、Directory.Build.targets
导入的很晚,MSBuild 那时已经开始识别它们,有了它,您可以添加任何可以识别的项目那个文件。
解决方案
1) 将文件更改为 Directory.Build.targets
2) 添加这些(你的):
<Compile Update="**\*Generated.cs">
<DependentUpon>$([System.String]::Copy(%(Filename)).Replace('.Generated', '.cs'))</DependentUpon>
</Compile>
在我身边很管用,希望对你有帮助。