我在 Visual Studio 2015 中有一个 C# DLL 项目 (A),其中包含一个我想复制到输出的自定义配置文件,因此“复制到输出目录”设置为“如果更新则复制”。此 DLL 被同一解决方案中的另一个项目 (B) 引用。每当我重建项目 B 时,项目 A 的配置文件都会按我的意愿复制到它的输出目录。
问题是,如果我修改仅 配置文件,它不会被复制到输出。我认为这是因为项目 A 的输出没有改变,所以 MSBuild 不会费心将它复制到项目 B 的输出目录。
我找到的解决方法是将配置文件的内容类型设置为“嵌入式资源”,这会导致项目 A 在配置文件更改时重建。这行得通,但是有点麻烦。有没有更好的方法来获得相同的行为,而无需实际将配置文件包含在 DLL 中?
最佳答案
好吧,我想我想出了一个办法。 Microsoft.CSharp.Core.targets
中定义了一个 CustomAdditionalCompileInputs
项组,CoreCompile
目标依赖于此。所以我简单地添加了以下目标,使 CoreCompile 依赖于所有具有构建操作 None
或 Content
的文件:
<Target Name="EnsureRecompiledOnConfigFileChanges" BeforeTargets="BeforeBuild">
<!-- Recompile the project if any items of type "None" or "Content" change in case some of them are config files for a DLL. -->
<ItemGroup>
<CustomAdditionalCompileInputs Include="@(None)" />
<CustomAdditionalCompileInputs Include="@(Content)" />
</ItemGroup>
</Target>
关于c# - 如何确保 C# 项目中配置文件的更改导致 DLL 重建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33870068/