【问题标题】:Web.config is being renamed by msbuildWeb.config 正在由 msbuild 重命名
【发布时间】:2014-02-13 04:55:20
【问题描述】:

我正在使用 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

【问题讨论】:

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


    【解决方案1】:

    我可以在 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 中新构建过程中的一个错误(但几乎是无害的,因为配置文件是多余的)。因为它与我的构建服务器上的 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

    【讨论】:

    • 感谢您提供的信息,@Nicholas。你知道什么工具在为你的后期构建步骤读取 XML 吗?
    【解决方案2】:

    我认为您的项目类型有误。您是否将其创建为 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#项目

    第, 呵呵

    【讨论】:

    • 这是一个 VB.net,而不是 c# 项目,它有:{349c5851-65df-11da-9384-00065b846f21};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}
    猜你喜欢
    • 2019-04-10
    • 2016-11-17
    • 2012-10-09
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多