gpt4 book ai didi

visual-studio - Visual Studio 在构建时将 .config 文件复制到 bin,但 MSBuild 不会

转载 作者:行者123 更新时间:2023-12-04 02:21:09 25 4
gpt4 key购买 nike

我在 Visual Studio 2013 中有一个 WebAPI 项目。如果我在 Visual Studio 中构建项目,在 bin/目录中我会看到一个名为 MyProject.dll.config 的文件,它代表构建时的 web.config 文件。

但是,如果我从命令行执行 MSBuild,.config 文件会丢失,但所有其他文件都存在。

> msbuild.exe /t:build /v:q /p:Configuration=Debug /nologo \
D:\Workspace\MyProject\src\MyProject.sln

是什么赋予了?为什么不复制.config?

最佳答案

对于部署 web 项目或 web api 项目,没有 $(TargetName)$(TargetExt).config 的事实并不重要。在运行时,IIS 将使用 Web.config 来确定程序集所需的一切。

但!

如果您使用 Web 应用程序或 Web Api 项目作为测试的基础*,那么您可能会遇到一些障碍。特别是,当涉及到程序集绑定(bind)重定向时(就像在撰写本文时的当前版本为 7.0.0 时仍然依赖 Newtonsoft.Json 4.5.0 的 MVC 内部的情况一样)。一位同事对他的测试项目所依赖的另一个程序集也有类似的问题。

现在,当您通过 Visual Studio(例如,通过 Resharper)运行测试时,它们都可以正常工作。但是,当您的测试到达 CI 服务器并由 nunit-console 运行时,您会看到程序集加载错误。不漂亮。这是因为描述的行为是 VS 偷偷地将 .config 文件复制到正确的输出而 msbuild 不是。但是,您可以使用构建后构建事件来解决此问题:

复制 $(ProjectDir)Web.Config $(TargetDir)$(TargetName)$(TargetExt).config

这解决了我的重定向问题。我希望它可以帮助别人。

  • 您可能会问“为什么使用 Web App 或 Web API 项目作为您的测试项目?”。 Web* 项目作为处理 .net 程序集和 JavaScript 测试的测试项目的基础更容易处理,因为 JavaScript 被正确识别(语法突出显示)并且有一个 Scripts 文件夹,其中包含快速“添加 -> Javascript File”菜单项用于自身和后代文件夹,所以我更喜欢使用它而不是普通的类库项目。
  • 关于visual-studio - Visual Studio 在构建时将 .config 文件复制到 bin,但 MSBuild 不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21070675/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com