添加 /p:Platform= "Any CPU"参数会强制在调试配置中构建



我运行以下命令来构建我的解决方案(C#中的所有项目):

MSBuild.exe foo.sln /t:Build /p:Configuration=Release /p:Platform="Any CPU"

它在调试配置中构建它。 如果我删除对"任何 CPU"的引用

MSBuild.exe foo.sln /t:Build /p:Configuration=Release

生成在发布配置中构建。

为什么? 我在这里错过了一些简单的东西吗?

添加/p:Platform="Any CPU" 参数会强制在调试配置中构建

项目的输出目录与项目文件foo.csprojPropertyGroupOutputPath的属性相关。

根据您的描述,您可能没有在项目文件中正确配置目标平台和OutputPath,例如:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>binDebug</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>

如果我们给出发布配置的<OutputPath>binDebug</OutputPath>,那么我们将在调试文件夹中获得输出。

因此,要解决此问题,您需要检查项目文件中的属性OutputPath,确保它与目标平台匹配。

希望这有帮助。

回答我自己的问题。 当我试图找到我的解决方案出错的复杂东西时(例如,梳理十几个 .csproj 文件),问题非常简单。

在解决方案/配置管理器中,对于发布/AnyCPU 设置,一些项目标记为调试(不知道为什么 - 解决方案可能已有十年历史)。将它们设置为"发布"解决了问题。

最新更新