vb.net - Web.config 正在被 msbuild 重命名

标签 vb.net visual-studio msbuild visual-studio-2013

我正在使用 VS 2013 构建 Web 服务。构建后,Web.config 文件将被重命名为“{projectname}.dll.config”。

有一个步骤 _CopyAppConfigFile 会被重命名,并显示在“输出”窗口中。我可以解决这个问题,通过设置始终复制 web.config,这会产生两个文件,web.config 和 x.dll.config,我可以忍受,但如果有人的话我想完全避免它知道怎么做。

编辑:看起来这是 MSBuild 文件的结果,位于:

C:\Program Files\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets

最佳答案

我可以在 C# ASP.NET MVC 项目中默认安装的 Visual Studio 2013 中重新创建此内容。我注意到这一点是因为我开始过渡到 Visual Studio 2013,但我们的构建服务器仍在 Visual Studio 2012 上;我们的安装项目在我提交一次后失败,因为我在机器上收集的多余配置文件没有在构建服务器上生成。

这似乎是以前版本的 MSBuild 4.0/Visual Studio 2012 和新版本 MSBuild 12.0/Visual Studio 2013 中的工作方式之间的差异。

在 Visual Studio 2013 中,$(ProjectConfigFileName) 属性被初始化为 Web.config [1],该属性被复制到 $(AppConfig) [2],这会导致 _CopyAppConfigFile 运行 [3],从而导致不必要的配置文件被命名并复制到 bin 目录。

在 Visual Studio 2012 中,过程类似,只是其版本的 Microsoft.WebApplication.targets 缺少 2013 版本中的这部分:

  <!-- Instruct ResolveAssemblyReferences in MS.Common.targets to generate suggested binding redirects. -->
  <PropertyGroup>
        <AutoUnifyAssemblyReferences>false</AutoUnifyAssemblyReferences>
        <AppConfig Condition="'$(AppConfig)' == '' And Exists('$(ProjectConfigFileName)')">$(ProjectConfigFileName)</AppConfig>
  </PropertyGroup>

关键是 AppConfig 行。由于 2012 版本中缺少 AppConfig 引用,因此 _CopyAppConfigFile 无法在 Visual Studio 2012 下运行,从而导致预期的行为(即不复制文件) .

在 Visual Studio 2013 中,看起来他们添加了这一行,以便构建过程可以通过在 Visual Studio 的错误列表中双击它们来修复绑定(bind)重定向。当微软添加此功能时,似乎没有人注意到它会生成一个额外的配置文件并将其复制到输出文件夹。所以在我看来,这似乎是 Visual Studio 2013 中新构建过程中的一个错误(但基本上是无害的,因为配置文件是多余的)。因为它与我的构建服务器上的 Visual Studio 2012 构建过程相冲突,我添加了一个额外的构建后步骤来清除无关文件:

  <Target Name="AfterBuild">
        <Delete ContinueOnError="true" Files="$(TargetPath).config" />
  </Target>

然后您会感觉更好,因为知道这不是您的特定项目或系统设置的问题,这只是 Visual Studio 2013 现在执行操作的方式。

<小时/>

上面引用的文件位置:

[1] C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets

[2] C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets

[3] C:\Program Files (x86)\MSBuild\12.0\Bin\Microsoft.Common.CurrentVersion.targets

关于vb.net - Web.config 正在被 msbuild 重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21745579/

相关文章:

sharepoint-2010 - 使用 msbuild 创建 wsp 文件

.net - 什么时候必须使用绑定(bind)重定向?

.net - 我怎样才能使这个通用

vb.net - 如何使用 vb.net 混淆表单上的密码输入?

asp.net - 如何在运行时重写 Web Config 连接字符串

javascript - Attributes.add、ScriptManager.RegisterStartupScript、ScriptManager.RegisterClientScriptBlock 不起作用

.net - 为什么过滤事件时某些 GUI 控件的类型智能感知/类型推断存在差异

c# - 我需要测试技巧

.net - 在 VS2010 中编译旧版本的 .net

msbuild - 子节点 "2"提前退出