我在VS2008中有一个C#项目,我想为两个目标构建 - x86和dot net(CF.Net)的紧凑框架,具体取决于所选的配置(比如Debug / SmartDeviceDebug等)。我该怎么做?我有一个暗示这可以使用命令行和msbuild以某种方式完成,但我感兴趣的是一个在VS2008内工作的解决方案。
请注意暂时我正在为两种目标类型使用两个不同的项目,但它是一项杂务,以保持文件之间的文件同步。将文件添加为链接也没有帮助(它不是可扩展的解决方案,文件的名称和数量变化太频繁。)
任何和所有建议都将不胜感激。
答案 0 :(得分:3)
我认为csproj必须与根据不同框架构建完全不同。但是,有一些技巧;例如,您可以在csproj中使用通配符。我在protobuf-net中使用它,它基于.NET 2.0 / 3.0 / CF 2.0 / CF 3.5 / Silverlight / Mono构建 - 所以我知道你的意思!
看看我的CF 2.0 csproj;特别是:
<ItemGroup>
<Compile Include="..\protobuf-net\**\*.cs" />
</ItemGroup>
即。找到主项目中任何级别的所有.cs文件。
答案 1 :(得分:2)
通常,您有两个问题 - 一种类型但不是另一种类型的文件,以及CF和FFx之间不同的引用。这些问题可以通过手动操作项目文件来解决 ,但是要预先警告VS IDE不会理解你这些问题(它不知道它应该重新加载整个项目当你的配置变更)。
你能做什么:
因此,如果项目引用的节点看起来像这样
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
您可以将其修改为
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Desktop|AnyCPU' >
<Reference Include="System, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" />
</ItemGroup>
请注意,您必须在此处为其提供完整名称。
然后,您可以类似地修改ItemGroup节点,以便将文件包含到每个项目中。
现在你已经完成了简单的部分。接下来你必须按下PropertyGroup nodes。这是查看CF项目文件和FFx项目文件并将相关节点放入条件父项的问题。请特别注意 ProjectTypeGuids 和 PlatformFamilyName 等内容。
所有这一切,我们发现只需要为我们需要重叠的CF和FFx版本维护单独的项目文件就不那么重要了。
答案 2 :(得分:0)
你不能(至少,我不知道)。
首先,项目引用是按项目进行的,而不是按照所选的配置,因此您不得不坚持使用cf dll,因此无法使用常规框架的功能。
这是一个痛苦的屁股,我理解你的问题,因为我正在遭受它们:(