msbuild -p:outputdir=c:\mydir被忽略了。

67

我正在使用以下命令从命令行运行msbuild:

msbuild mysolution.sln -p:outputdir=c:\mydir
当我运行这个命令时,输出目录被忽略了,而是使用了csproj文件中指定的默认目录。根据该工具的MSDN文档,我应该能够使用此参数覆盖生成目录。我做错了什么?

1
我在这里犯了一个错误,使用了“-p”而不是“/p”。MSBuild命令行参考的MSDN文档(http://msdn.microsoft.com/en-us/library/ms164311.aspx)错误地提到了outputdir。 - Mike
你应该自己写评论和答案。 - MX D
3个回答

139

你应该使用OutputPath,更重要的是你应该使用正确的语法:

msbuild mysolution.sln /p:OutputPath=c:\mydir

感谢你在这件事情上的帮助。我想你在提到语法问题时是指/p而不是-p。我实际上在cmd.exe中使用了/p,但在这里搞错了——太多的PowerShell了。至于Outputpath,准确无误。谢谢。 - Mike
它对我也起作用了。我使用的是 /P:outputdir 而不是 /p:outputpath。 - Oscar Foley
3
确保省略结尾的 \。使用 /p:OutputPath=c:\mydir 而不是 /p:OutputPath=c:\mydir\ - Jake Berger
2
我尝试过这样做,但是当链接器输出目录在项目选项中指定时,MSBuild似乎会忽略OutputPath - Jim Fell
6
如果这个方法不起作用,1:考虑使用OutDir代替OutputPath。 2:确保OutDir是你的/p:参数列表中最先列出的内容。 - kayleeFrye_onDeck
3
OutputPath在我的情况下没有效果,但是OutDir有效。 - TorbenJ

9
请注意,OutputPath 优先于 OutDir。文档以前是错误的,但我看到他们终于修复了。
除此之外,很难确定问题所在,因为您没有显示传递的确切路径。我能想象到两个可能的问题:
1. OutputPath 选项指定输出目录的路径相对于项目目录。这意味着您不能将其设置为全局路径,例如 C:\mydir。我假设它无法找到您指定的路径,因此默认使用项目文件中指定的路径。
2. 如果您实际上指定的路径包含空格,则命令可能会失败。我认为您需要用引号括起来,并在路径字符串末尾添加一个额外的反斜杠。

谢谢你的所有帮助,Cody。我一直在阅读文档(VS 2010 的 MSBuild 命令行参考:http://msdn.microsoft.com/en-us/library/ms164311.aspx),使用的是 OutputDir。我想我们正在阅读不同的页面。现在我也已经成功构建了,使用类似 c:\mydir 的绝对目录引用。 - Mike
@Mike:当你在很多不同的地方记录完全相同的功能时,这些问题就会发生。我不确定你是否在说 OutputPath 对你无效?OutDir 仍然可以 起作用。 - Cody Gray
3
伙计们,没有 OutputDir 参数。只有 OutputPathOutDir。不要再增加混淆了。 - Steven Liekens
1
FYI - 看起来 OutputPath 可以是绝对路径。 - Mark Lopez
@StevenLiekens 我认为 OutputDir 是来自于旧版本的 MSBuild。我在我的 csproj 文件中看到过它的使用。但是在现代的 VS 中,它们可以正常编译。 - nawfal
你有关于“OutputPath优先于OutDir”的参考资料吗?根据https://github.com/dotnet/msbuild/issues/87#issuecomment-101467157,情况恰恰相反。而且https://learn.microsoft.com/en-us/cpp/build/reference/common-macros-for-build-commands-and-properties?view=msvc-170在文档中甚至没有包括`OutputPath`。 - Mark Ingram

2
我相信您应该使用 OutputPath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接