根据项目配置更改 csproj OutputType

Posted

技术标签:

【中文标题】根据项目配置更改 csproj OutputType【英文标题】:Changing csproj OutputType based on project configuration 【发布时间】:2011-10-15 13:03:53 【问题描述】:

我需要根据项目的配置将 C# 项目构建为 WinExe 或库。

我尝试了这两种方法都没有运气:

1) 在一般的 PropertyGroup 中:

<OutputType Condition=" '$(Configuration)' == 'Release' ">WinExe</OutputType> <OutputType Condition=" '$(Configuration)' == 'Debug' ">Library</OutputType>

2) 在条件 PropertyGroup 中:

<PropertyGroup Condition=" '$(Configuration)' == 'Release' "> <OutputType>WinExe</OutputType> </PropertyGroup>

<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <OutputType>Library</OutputType> </PropertyGroup>

这些方法都不起作用,并且 OutputType 始终是 WinExe。奇怪的是,如果我将 WinExe 的所有实例更改为 Library,那么它始终是 Library。这让我觉得它正在成功地读取它们,但不是以奇怪的顺序,就是 WinExe 优先于库。

有什么想法吗?

【问题讨论】:

只要您的 OutputType 声明出现在任何其他声明之后,从而覆盖它,您上面的内容应该可以工作。但它也需要在任何包含基于 $(OutputType) 值的更多属性的导入语句之前 你想让它在 VS 中工作还是只有命令行可以? 【参考方案1】:

在 .csproj 文件的顶部,您将有两个部分看起来有点像这样:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
  <OutputType>Library</OutputType>
  <!-- Other properties go here -->
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
  <OutputType>Exe</OutputType>
  <!-- Other properties go here -->
</PropertyGroup>

将您的 OutputType 元素添加到这两个条件 PropertyGroup 部分,并确保删除所有其他 OutputType 元素 - 我刚刚对其进行了测试,它完全符合您的要求。

是的,这与您已经完成的非常相似,但我知道上述方法有效,因为我刚刚尝试过 - 我唯一的猜测是您构建中的其他地方正在搞砸事情。

【讨论】:

啊,我们所做的似乎工作正常。 Visual Studio 只是错误地报告它,但它确实构建了正确的输出类型。

以上是关于根据项目配置更改 csproj OutputType的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2017 csproj 核心文件排除

是否有一种明智的方法可以在分支之间合并 Visual Studio 项目文件(.csproj)?

project.json 和 csproj 属性之间的映射

Visual Studio - 根据选择的配置为多个平台构建

.csproj 文件在构建解决方案时自动更改?

在 C# csproj 中用零填充版本控制