[英]C# - Code compiler for .NET & CF.NET
我有一個需要使用.NET和Compact .NET Framework編譯的項目。
CF.NET Framework中沒有一些功能,所以我自己創建了它(創建了與.NET Framework中具有完全相同名稱和選項的類。如果我使用類似[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相比,.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.