我在Visual Studio 2013中有一个WebAPI项目。如果我在Visual Studio中构建项目,在bin /目录中我会看到一个名为MyProject.dll.config的文件,它代表构建时的web.config文件。 / p>
但是,如果我从命令行执行MSBuild,则会丢失.config文件,但所有其他文件都存在。
> msbuild.exe /t:build /v:q /p:Configuration=Debug /nologo \
D:\Workspace\MyProject\src\MyProject.sln
是什么给出的?为什么不复制.config?
答案 0 :(得分:3)
对于部署Web项目或web api项目,没有$(TargetName)$(TargetExt).config的事实并不是什么大问题。在运行时,IIS将使用Web.config来确定程序集所需的一切。
BUT!
如果您使用Web App或Web Api项目作为测试*的基础,那么您可以遇到一些障碍。特别是,当涉及到程序集绑定重定向时(就像MVC的内容中的某些情况一样,当写入时的当前版本是7.0.0时仍然依赖于Newtonsoft.Json 4.5.0)。一位同事与他的测试项目依赖的另一个集会有类似的问题。
现在,当您通过Visual Studio运行测试时(例如,通过Resharper),它们都可以正常工作。但是,当您的测试到达CI服务器并且它们由nunit-console运行时,您将看到程序集加载错误。不漂亮。这是因为VS描述的行为将.config文件偷偷地复制到正确的输出而msbuild没有。但是,您可以使用构建后构建事件解决此问题:
copy $(ProjectDir)Web.Config $(TargetDir)$(TargetName)$(TargetExt).config
这解决了我的重定向问题。我希望它可以帮助别人。
答案 1 :(得分:1)
创建WebAPI项目时,默认情况下web.config Copy to Output Directory
设置为Do Not Copy
。您是否在解决方案资源管理器中选择了Web.config并将其设置为复制操作?
我无法解释为什么它似乎是为你复制IDE而不是你展示的msbuild cmd,这不是我在2013年看到的一个新的WebAPI项目的行为。