異なる.NETバージョンの条件付きコンパイル
.NET 2.0でのコンパイルを成功させるために、System.Runtime.CompilerServices.ExtensionAttributeを定義するファイルPatch.csを書きました. タイプです.これにより、2.0でlambda式と拡張方法を使用できます.また、System.Core.dllで導入されたActionタイプをいくつか追加します.
namespace System.Runtime.CompilerServices
{
public クラス ExtensionAttribute : Attribute { }
}
namespace System
{
public delegate void Action();
public delegate void Action(T0 t0,T1 t1);
}
ただし、.NET 4.0でコンパイルするには、すでにタイプが存在するため、Patch.csを注釈しなければならないので、面倒です.条件コンパイルで解決したいのです.
#if NET2
namespace System.Runtime.CompilerServices
{
public クラス ExtensionAttribute : Attribute { }
}
namespace System
{
public delegate void Action();
public delegate void Action(T0 t0,T1 t1);
}
湖南省にある地名
問題は、.netには.netバージョンに関するインジケータが定義されていません.どうすればいいですか?自分で手を出して、衣食を豊かにして、Build Eventsを使ってコンパイルする前にプロジェクトで使用されている.netバージョンを自動的に検出して、私たちが望んでいるインジケータを定義します.
にある C#テンプレートプログラミング(2):C#プリプロセッサを作成し、テンプレートからのもう少し自然な文章の中で、Csmacro.exeをプログラムしてC#の下のテンプレートメカニズムを実現し、本文はCsmacro.exeの基礎の上で、偵察プロジェクトが引用した.netバージョンの機能を増加させる.
原理:プロジェクトディレクトリの下のcsprojファイルを検索し、それを解析し、ノードTargetFrameworkVersionを見つけ、.netバージョンを判断し、Csmacro_Template.csファイルを生成し、その中の#defineバージョンインジケータを生成します.たとえば、.Net 2.0プロジェクトで生成されたCsmacro_Template.csファイルの内容は次のとおりです.
#define NET2
修正後のCsmacroのコードは次のとおりです.https://github.com/xiaotie/GebCommon上ダウンロード(現在は.net 2.0と4.0しか処理されていませんが、他のバージョンに対して必要であれば、自分でコードを修正することができます).Csmacroがあれば、すべてがやりやすいです.
最初にCsmacro.exeをPathパスの下に置く
ステップ2では、条件付きコンパイルが必要なプロジェクトを開き、Pre-buildイベント:Csmacro.exe$(ProjectDir)を追加します.
ステップ3では、Patch.csファイルなどのソースファイルを編集します.
#region include "Csmacro_Template.cs"
#endregion
#if NET2
namespace System.Runtime.CompilerServices
{
public クラス ExtensionAttribute : Attribute { }
}
namespace System
{
public delegate void Action();
public delegate void Action(T0 t0,T1 t1);
}
湖南省にある地名
#region includeは、私が導入したCsmacroマクロ構文です.詳細は、 C#テンプレートプログラミング(2):C#プリプロセッサを作成し、テンプレートをもっと自然にする 文書.コンパイルをクリックすると、次のようなPatch_Csmacro.csファイルが生成されます.
#define NET2
#if NET2
namespace System.Runtime.CompilerServices
{
public クラス ExtensionAttribute : Attribute { }
}
namespace System
{
public delegate void Action();
public delegate void Action(T0 t0,T1 t1);
}
#endif
ステップ4では、生成されたPatch_Csmacro.csをプロジェクトに追加します.
完了したら、異なるtargetを選択し、コンパイル時に発生するのはそのtargetに対する条件コンパイルです!
テキストリンク:http://www.cnblogs.com/xiaotie/archive/2012/11/26/2789810.html
namespace System.Runtime.CompilerServices
{
public クラス ExtensionAttribute : Attribute { }
}
namespace System
{
public delegate void Action();
public delegate void Action(T0 t0,T1 t1);
}
ただし、.NET 4.0でコンパイルするには、すでにタイプが存在するため、Patch.csを注釈しなければならないので、面倒です.条件コンパイルで解決したいのです.
#if NET2
namespace System.Runtime.CompilerServices
{
public クラス ExtensionAttribute : Attribute { }
}
namespace System
{
public delegate void Action();
public delegate void Action(T0 t0,T1 t1);
}
湖南省にある地名
問題は、.netには.netバージョンに関するインジケータが定義されていません.どうすればいいですか?自分で手を出して、衣食を豊かにして、Build Eventsを使ってコンパイルする前にプロジェクトで使用されている.netバージョンを自動的に検出して、私たちが望んでいるインジケータを定義します.
にある C#テンプレートプログラミング(2):C#プリプロセッサを作成し、テンプレートからのもう少し自然な文章の中で、Csmacro.exeをプログラムしてC#の下のテンプレートメカニズムを実現し、本文はCsmacro.exeの基礎の上で、偵察プロジェクトが引用した.netバージョンの機能を増加させる.
原理:プロジェクトディレクトリの下のcsprojファイルを検索し、それを解析し、ノードTargetFrameworkVersionを見つけ、.netバージョンを判断し、Csmacro_Template.csファイルを生成し、その中の#defineバージョンインジケータを生成します.たとえば、.Net 2.0プロジェクトで生成されたCsmacro_Template.csファイルの内容は次のとおりです.
#define NET2
修正後のCsmacroのコードは次のとおりです.https://github.com/xiaotie/GebCommon上ダウンロード(現在は.net 2.0と4.0しか処理されていませんが、他のバージョンに対して必要であれば、自分でコードを修正することができます).Csmacroがあれば、すべてがやりやすいです.
最初にCsmacro.exeをPathパスの下に置く
ステップ2では、条件付きコンパイルが必要なプロジェクトを開き、Pre-buildイベント:Csmacro.exe$(ProjectDir)を追加します.
ステップ3では、Patch.csファイルなどのソースファイルを編集します.
#region include "Csmacro_Template.cs"
#endregion
#if NET2
namespace System.Runtime.CompilerServices
{
public クラス ExtensionAttribute : Attribute { }
}
namespace System
{
public delegate void Action();
public delegate void Action(T0 t0,T1 t1);
}
湖南省にある地名
#region includeは、私が導入したCsmacroマクロ構文です.詳細は、 C#テンプレートプログラミング(2):C#プリプロセッサを作成し、テンプレートをもっと自然にする 文書.コンパイルをクリックすると、次のようなPatch_Csmacro.csファイルが生成されます.
#define NET2
#if NET2
namespace System.Runtime.CompilerServices
{
public クラス ExtensionAttribute : Attribute { }
}
namespace System
{
public delegate void Action();
public delegate void Action(T0 t0,T1 t1);
}
#endif
ステップ4では、生成されたPatch_Csmacro.csをプロジェクトに追加します.
完了したら、異なるtargetを選択し、コンパイル時に発生するのはそのtargetに対する条件コンパイルです!
テキストリンク:http://www.cnblogs.com/xiaotie/archive/2012/11/26/2789810.html