c# - 如何确保 C# 项目中配置文件的更改导致 DLL 重建?

标签 c# build msbuild visual-studio-2015

我在 Visual Studio 2015 中有一个 C# DLL 项目 (A),其中包含一个我想复制到输出的自定义配置文件,因此“复制到输出目录”设置为“如果更新则复制”。此 DLL 被同一解决方案中的另一个项目 (B) 引用。每当我重建项目 B 时,项目 A 的配置文件都会按我的意愿复制到它的输出目录。

问题是,如果我修改 配置文件,它不会被复制到输出。我认为这是因为项目 A 的输出没有改变,所以 MSBuild 不会费心将它复制到项目 B 的输出目录。

我找到的解决方法是将配置文件的内容类型设置为“嵌入式资源”,这会导致项目 A 在配置文件更改时重建。这行得通,但是有点麻烦。有没有更好的方法来获得相同的行为,而无需实际将配置文件包含在 DLL 中?

最佳答案

好吧,我想我想出了一个办法。 Microsoft.CSharp.Core.targets 中定义了一个 CustomAdditionalCompileInputs 项组,CoreCompile 目标依赖于此。所以我简单地添加了以下目标,使 CoreCompile 依赖于所有具有构建操作 NoneContent 的文件:

  <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/

相关文章:

c# - Toast 通知不起作用?

build - 如何使用 gyp 生成 "make install" Action ?

c++ - 为 Jenkins 从 devenv(逐个项目)分离控制台输出

visual-studio-2010 - MSBuild 2010 - 如何将 Web 应用程序发布到特定位置 (nant)?

C# 在另一个函数中覆盖 string 和 string[]

javascript - 将列表传递给 View 后如何转换列表的 C# 列表?

linux - 在 x64 CentOS 上构建 Cairo 时遇到问题

visual-studio - Visual Studio 在构建期间不断挂起

msbuild - 将自定义 msbuild 目标从解决方案传递到项目

C#如何设置声音字节的音量[]