我们希望提供两个自定义平台开关(配置管理器中的平台下拉),用于Visual 中的项目。
例如,一个用于“桌面”,另一个用于“Web”。然后,目标构建任务以基于平台开关的自定义方式编译代码。我们不想添加到Debug发布开关中,因为我们需要为每个桌面和Web平台添加这些。
我们找到了一种尝试这样做的方法,就是修改.csproj文件以添加如下内容
<Platform Condition=" '$(Platform)' == '' ">Desktop</Platform>添加属性组,例如,
<PropertyGroup Condition=" '$(Platform)' == 'Web' ">
<DefineConstants>/define Web</DefineConstants>
<PlatformTarget>Web</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'Desktop' ">
<DefineConstants>/define Desktop</DefineConstants>
<PlatformTarget>Desktop</PlatformTarget>
</PropertyGroup>但是这仍然不起作用,编译器会抛出一个错误
/platform的无效选项“桌面”;必须为anycpu、x86、Itanium或x64
那么,它必须是其中之一,我们不能添加我们的定制平台吗?
有人能做到吗?任何指示都会有帮助。
更新:使用DebugDesktop和ReleaseDesktop将使用户的操作更加复杂。因为‘桌面’和'web‘实际上是平台,而且也有能力在下拉列表(即)中添加新的平台,所以我认为'platform’开关应该用于完全相同的目的。
发布于 2008-11-05 18:38:47
您应该能够使用Configuration对话框来创建新的平台。
发布于 2011-06-24 04:13:30
也许三年后这个话题对某些人来说会很有趣。我在配置构建平台方面也遇到了类似的困难,并解决了这些问题。
引发错误是因为PlatformTarget属性是用Desctop设置的,而不是因为Platform属性。这两个属性的含义有点不同。第一种方法最终真正指导构建过程的所有参与者应该使用哪种流程体系结构,而第二种方法允许在IDE中定制构建环境。
在Visual中创建项目时,ProcessTarget属性可以默认使用AnyCPU在PropertyGroups下设置,这些条件限制如下:“‘...|$(平台)’== '...|AnyCPU'”。但它并没有强迫你这么做。对于具有其他值的Platform属性,ProcessTarget属性可以很容易地使用AnyCPU进行设置。
考虑到上面描述的情况,您的示例可能如下所示:
<PropertyGroup Condition=" '$(Platform)' == 'Web' ">
<DefineConstants>Web</DefineConstants>
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'Desktop' ">
<DefineConstants>Desktop</DefineConstants>
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>一定是起作用了。
希望它对你有用。
发布于 2010-06-08 18:11:28
我最近也问了同样的问题,看来使用Visual 2010,您可以定义自己的项目平台。(见链接)。不幸的是,我们仍在使用2008年。
https://stackoverflow.com/questions/266028
复制相似问题