我正在尝试在.Net v4.0上进行发布和调试构建,其中我有一个MSBuild项目文件而不是解决方案文件。我想使用相同的构建项目文件,但只是覆盖“调试”和“发布”之间的配置属性切换。
当我按如下方式执行时
c:\windows\microsoft.net\framework\v4.0.30319\msbuild.exe buildinv.proj /target:rebuild "/property:Configuration=Debug" /verbosity:Diagnostic
我收到以下错误
c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(483,9): error : The OutputPath property is not set for project 'buildinv.proj'. Please check to make sure that you have specified a valid combination of Configuration and Platform for this project. Configuration='Debug' Platform=''.
我可以看到错误发生在_CheckForInvalidConfigurationAndPlatform
。
如果我传递一个OutputPath属性,它将起作用
c:\windows\microsoft.net\framework\v4.0.30319\msbuild.exe buildinv.proj /target:rebuild "/property:Configuration=Debug" "/property:OutputPath=."
这是一个已知的错误吗?在我需要覆盖Configuration属性的地方,即使我不希望,我也会被迫覆盖OutputPath属性。
提前致谢。
答案 0 :(得分:4)
在我的项目文件中,OutputPath属性在为每个配置和放大器指定的属性组中定义。平台。如果未设置正确的Platform,则不会设置OutputPath属性,并且构建将失败。
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>bin\Debug\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>bin\Release\</OutputPath>
</PropertyGroup>
将Platform属性添加到命令行中:
c:\windows\microsoft.net\framework\v4.0.30319\msbuild.exe buildinv.proj /target:rebuild "/property:Configuration=Debug;Platform=AnyCPU" /verbosity:Diagnostic
答案 1 :(得分:2)
如果您不想修改项目文件,也可以在命令中为构建指定OutputPath:
c:\windows\microsoft.net\framework\v4.0.30319\msbuild.exe buildinv.proj /target:rebuild "/property:Configuration=Debug;OutputPath=C:\MyOutputPath" /verbosity:Diagnostic
答案 2 :(得分:1)
将以下内容之一添加到项目文件中。错误意味着 OutputPath 环境变量没有得到它的值。通过从PropertyGroup中删除“Condition =”,默认情况下将始终为任何平台或配置设置OutputPath。
<PropertyGroup>
<OutputPath>bin\Debug\</OutputPath>
</PropertyGroup>
<PropertyGroup>
<OutputPath>$(DefaultOutputDirectory)</OutputPath>
</PropertyGroup>