C# – .NET和CF.NET的代码编译器

我有一个需要使用.NET和Compact .NET Framework编译的项目。

  1. 有可能创建一个C#编译器,用两个框架编译我的项目吗?
  2. CF.NET Framework中没有一些function,所以我自己创建它(创建与.NET Framework中具有完全相同名称和选项的类。如果我使用类似[CF35]的属性来解析这些类,则可以解析项目和:

    • 使用CF.NET编译项目时使用此类
    • 使用.NET编译项目时忽略此类

感谢所有建设性的答案。

[编辑]

我知道解决方案包括创建两个引用相同文件的项目。 问题是,你应该每次都手动编译。 此外,当你将一个文件添加到一个文件时,你需要打开第二个文件并引用它,它只是无聊而且根据我们很多人来处理同一个项目,我想自动完成这个部分。

似乎可能吗?


[编辑2]除了……资源文件外,一切正常!

所以,要恢复,我有三个项目:

  • 开发项目(CF.NET)
  • 发布项目(CF.NET 3.5),包括所有文件通过“”
  • 发布项目(NET 3.5),包括所有文件“”

如上所述,一切正常,但现在我的问题是使用资源文件。

申请使用它的方法是什么?

  • 当我使用开发项目时,正确检索资源文​​件
  • 当我使用另外两个项目时,ResourceManager会抛出MissingManifestResourceException

任何的想法?

基本的想法是用每个框架版本的#if编译器指令装饰你的代码?

#if CFNET // .net CF code #else // .net code #endif 

从这里你有两个选择:

A)具有自定义构建配置的1个项目文件

如果您想在1 csproj文件中包含所有内容,则需要手动修改它。 由于这是一个msbuild文件,这更像是一个msbuild问题。 我想你需要做以下事情:

  1. 使用2个平台名称说“NET”和“CF”(而不是默认的任何CPU或x86)
  2. 定义CF常量(从现在起编辑csproj):

    CF

  3. 根据所选平台导入正确的构建目标:

    我不知道CF的目标文件名,因为我没有安装它。 它可能位于C:\Windows\Microsoft.NET\**.targets

B)2个项目文件,每个文件包含适当的构建配置

正如我最初指出的那样,也有一些评论者指出,最好的解决方案是拥有2个项目文件,保持同步。 您可以在两个项目文件中包含相同的源文件。

所以一个想法是(而不是每次手动复制文件列表)

  1. 考虑使用T4模板,保持源文件同步(并有2个解决方案,这样每次都不会提示你重新加载整个解决方案)或者
  2. 修改两个csproj文件并使用通配符编译标记,如下所示:

您需要为每个构建配置创建不同的构建配置,并定义自定义标志,如USE_CF 。 然后使用#if USE_CF#endif包装自定义类,以便在没有该标志的情况下编译时忽略它们

只有一个C#编译器,它为任何平台发出完全相同的IL。 参考程序集有什么不同,您必须将CF版本用于面向CF的项目,即面向.NET的项目的桌面版本。 这需要两个项目。 他们可以引用相同的源代码文件。 现在添加仅CF的源代码文件当然不再是问题。

保持项目同步是VS2010中的一项function。 对于Silverlight而言,对于CF项目来说毫无意义,因为它不再支持它。

更好的方法是创建正常的项目类库(.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