簡體   English   中英

C# - .NET和CF.NET的代碼編譯器

[英]C# - Code compiler for .NET & CF.NET

我有一個需要使用.NET和Compact .NET Framework編譯的項目。

  1. 有可能創建一個C#編譯器,用兩個框架編譯我的項目嗎?
  2. CF.NET Framework中沒有一些功能,所以我自己創建了它(創建了與.NET Framework中具有完全相同名稱和選項的類。如果我使用類似[CF35]的屬性來解析這些類,則可以解析項目和:

    • 使用CF.NET編譯項目時使用此類
    • 使用.NET編譯項目時忽略此類

感謝所有建設性的答案。

[編輯]

我知道解決方案包括創建兩個引用相同文件的項目。 問題是,你應該每次都手動編譯。 此外,當你向一個文件中添加一個文件時,你需要打開第二個文件並引用它,它只是無聊而且根據我們很多人來處理同一個項目,我想自動完成這個部分。

似乎可能嗎?


[編輯2]除了......資源文件外,一切正常!

所以,要恢復,我有三個項目:

  • 開發項目(CF.NET)
  • 發布項目(CF.NET 3.5),包括所有文件通過“”
  • 發布項目(NET 3.5),包括所有文件“”

如上所述,一切正常,但現在我的問題是使用資源文件。

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

  • 當我使用開發項目時,正確檢索資源文​​件
  • 當我使用其他兩個項目時,ResourceManager會拋出MissingManifestResourceException

任何想法?

您需要為每個構建配置創建不同的構建配置,並定義自定義標志,如USE_CF 然后使用#if USE_CF#endif包裝自定義類,以便在沒有該標志的情況下編譯時忽略它們

基本的想法是用每個框架版本的#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):

    <PropertyGroup Condition="'$(Platform)' == 'CF'"> <DefineConstants>CF</DefineConstants> </PropertyGroup>

  3. 根據所選平台導入正確的構建目標:

    <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個項目文件,保持同步。 您可以在兩個項目文件中包含相同的源文件。

所以一個想法是(而不是每次手動復制文件列表)

  1. 考慮使用T4模板,保持源文件同步(並有2個解決方案,這樣每次都不會提示你重新加載整個解決方案)或者
  2. 修改兩個csproj文件並使用通配符編譯標記,如下所示:

    <Compile Include="**/*.cs"/>

只有一個C#編譯器,它為任何平台發出完全相同的IL。 參考程序集有什么不同,您必須將CF版本用於面向CF的項目,即面向.NET的項目的桌面版本。 這需要兩個項目。 他們可以引用相同的源代碼文件。 現在添加僅CF的源代碼文件當然不再是問題。

保持項目同步是VS2010中的一項功能。 適用於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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM