我有一个需要使用.NET和Compact .NET Framework编译的项目。
某些功能不存在 CF.NET Framework所以我创建了它 我自己(创造班级 完全相同的名字&选项 在.NET Framework中。如果我拒绝这个 具有类似属性的类 [CF35]可以解析 项目和:
感谢所有建设性的答案。
[编辑]
我知道解决方案包括创建两个引用相同文件的项目。 问题是,你应该每次都手动编译。 此外,当你向一个文件中添加一个文件时,你需要打开第二个文件并引用它,它只是无聊而且根据我们很多人来处理同一个项目,我想自动完成这个部分。
似乎有可能吗?
[编辑2] 一切正常,除了......资源文件!
所以,为了恢复,我有三个项目:
如上所述,一切正常,但现在我的问题是使用资源文件。
申请使用它的方法是什么?
有什么想法吗?
答案 0 :(得分:6)
您需要为每个构建配置创建不同的构建配置,并定义自定义标记,如USE_CF
。然后使用#if USE_CF
和#endif
包装自定义类,以便在没有该标志的情况下编译时忽略它们
答案 1 :(得分:4)
基本思想是用每个框架版本的#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文件并使用wildcard compile tag,如下所示:
<Compile Include="**/*.cs"/>
答案 2 :(得分:4)
只有一个C#编译器,它为任何平台发出完全相同的IL。参考程序集有什么不同,您必须将CF版本用于面向CF的项目,即面向.NET的项目的桌面版本。这需要两个项目。他们可以引用相同的源代码文件。现在添加仅CF的源代码文件当然不再是问题。
保持项目同步是VS2010中的一项功能。对于Silverlight而言,对于CF项目来说毫无意义,因为它不再支持它。
答案 3 :(得分:3)
更好的方法是创建正常的项目类库(.NET)并添加所有代码。然后创建第二个类库项目(.NET CF),但引用第一个项目中的代码文件(不是复制,而是引用)。然后你最终得到2个DLL,你不必处理令人讨厌的丑陋的编译器指令。您可以获得所需的结果,无需额外的工作来维护这两个项目。显然,您需要小心处理代码中的内容,因为与.NET相比,.NET CF是有限的。我不知道如何使用visual studio添加文件引用(快捷方式),但我在记事本中打开proj文件并使用包含的文件的相对路径。我已经将此方法用于.NET / .NET CF以及.NET / Silverlight
另外,请看一下Portable Library Tool CTP http://visualstudiogallery.msdn.microsoft.com/b0e0b5e9-e138-410b-ad10-00cb3caf4981/?localeName=ko-kr