我有一个相同的项目,需要使用 .NET 和 Compact .NET Framework 进行编译。
某些功能不存在于 CF.NET Framework 所以我创建了它 我自己(创建具有 完全相同的名称和选项 在.NET框架中。如果我装饰这个 具有类似属性的类 [CF35] 可以解析 项目和:
?
感谢所有有建设性的回答。
[编辑]
我知道解决方案包括创建两个引用相同文件的项目。 问题是,您每次都应该手动编译。 此外,当你向一个文件添加一个文件时,你需要打开第二个文件并引用它,这很无聊,而且根据我们有很多人在同一个项目上工作,我想自动完成这部分。
好像可以吗?
[编辑2] 除了...资源文件之外,一切正常!
所以,为了继续,我有三个项目:
如上所述,一切正常,但现在我的问题是使用资源文件。
如何申请使用?
有什么想法吗?
您需要为每个配置创建不同的构建配置,并定义一个自定义标志,例如
USE_CF
。 然后用 #if USE_CF
和 #endif
包装您的自定义类,这样在没有该标志的情况下编译时它们会被忽略
基本的想法是用每个框架版本的 #if 编译器指令来装饰你的代码?
#if CFNET
// .net CF code
#else
// .net code
#endif
从这里您有两种选择:
A) 1 个具有自定义构建配置的项目文件
如果您想将所有内容都包含在 1 个 csproj 文件中,则需要手动修改它。由于这是一个 msbuild 文件,这更像是一个 msbuild 问题。我想你需要做以下事情:
定义CF常量(从现在开始编辑csproj):
<PropertyGroup Condition="'$(Platform)' == 'CF'">
<DefineConstants>CF</DefineConstants>
</PropertyGroup>
根据所选平台导入正确的构建目标:
<Import Condition="'$(Platform)' == 'NET'" Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Condition="'$(Platform)' == 'CF'" Project="$(MSBuildToolsPath)\<CFtargets>.targets" />
我不知道CF的目标文件名,因为我没有安装它。它应该在
C:\Windows\Microsoft.NET\**.targets
B) 2 个项目文件,每个文件包含适当的构建配置
正如我最初指出的,以及一些评论者指出的,最好的解决方案是拥有 2 个项目文件,并保持同步。您可以在两个项目文件中拥有相同的源文件。
所以一个想法是(而不是每次手动复制文件列表)
修改两个csproj文件并使用通配符编译标记,如下所示:
<Compile Include="**/*.cs"/>
只有一个 C# 编译器,它为任何平台生成完全相同的 IL。 不同之处在于参考程序集,您必须对面向 CF 的项目使用 CF 版本,对面向 .NET 的项目使用桌面版本。 这需要两个项目。 他们可以引用相同的源代码文件。 添加仅 CF 的源代码文件现在当然不再是问题。
保持项目同步是 VS2010 中提供的一项功能。 适用于 Silverlight,当然对于 CF 项目来说毫无意义,因为它不再支持它。
更好的方法是创建普通项目类库 (.NET) 并添加所有代码。然后创建第二个类库项目 (.NET CF),但引用第一个项目中的代码文件(不是复制,而是引用)。然后你最终会得到 2 个 DLL,并且你不必处理令人讨厌的丑陋的编译器指令。您无需额外的工作来维护这两个项目即可获得所需的结果。显然,您需要小心代码中的内容,因为 .NET CF 与 .NET 相比是有限的。我不知道如何使用 Visual Studio 添加文件引用(快捷方式),但我在记事本中打开 proj 文件并使用要包含的文件的相对路径。我已将这种方法用于 .NET/.NET CF 以及 .NET/Silverlight
此外,请查看便携式库工具 CTP http://visualstudiogallery.msdn.microsoft.com/b0e0b5e9-e138-410b-ad10-00cb3caf4981/?localeName=ko-kr