2011-07-28 71 views
5

根据项目的配置,我需要将C#项目构建为WinExe或Library。根据项目配置更改csproj OutputType

我已经试过这两种方法,没有运气:

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优先于Library。

任何想法?

+1

只要你的输出类型声明出现在任何其他声明之后,从而覆盖它,上面你应该有什么工作。但是它也需要在包含基于$(OutputType) –

+0

的值的更多属性的任何导入语句之前您是否希望它在VS中工作或者仅在命令行中可用? –

回答

7

在你的.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元素 - 我刚刚测试过它,它完全符合你的要求。

是的,这与您已经完成的操作非常相似,但是我知道上述方法的工作原理,因为我刚刚尝试过 - 我唯一的猜测就是您的构建中的其他某处正在将某些东西搞乱。

+0

啊,我们做的似乎没有问题。 Visual Studio只是不正确地报告它,但它实际上构建了正确的输出类型。 –