繁体   English   中英

msbuild正在重命名Web.config

[英]Web.config is being renamed by msbuild

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

有一个步骤_CopyAppConfigFile,它被重命名,显示在Output窗口中。 我可以解决这个问题,通过设置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的“错误”列表中双击它们来修复绑定重定向。 当微软添加这个时,似乎没有人注意到它导致生成额外的配置文件并将其复制到输出文件夹。 所以在我看来,在Visual Studio 2013的新构建过程中,好像它是一个bug(但是一个无害的,因为配置文件是多余的)。因为它与我的构建服务器上的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

我认为你有错误的项目类型。 您是否将其创建为Web项目? 这是在你的csproj文件中吗?

{349c5851-65df-11DA-9384-00065b846f21}; {fae04ec0-301f-11D3-bf4b-00c04f79efbc}

来自http://www.mztools.com/articles/2008/mz2008017.aspx

349c5851-65df-11da-9384-00065b846f21 = Web应用程序fae04ec0-301f-11d3-bf4b-00c04f79efbc = C#Project

Hth,Ojf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM