2017-03-20 7 views
0

Visual Studio/msbuildを使用して.NETアプリケーションライブラリDLLをデプロイしています。このライブラリは、ターゲットとする複数のプラットフォームに対して多くの構成を備えています。これらのDLLをロードするコンテナがどのプラットフォームに適合するかを知ることができなければならないため、各ビルドに沿ってコンフィギュレーションデータの一部をエクスポートする方法を見つける必要があります。ビルド時にDLLに沿ってコンフィグレーションデータをエクスポート

私は、カスタムアセンブリ属性を使用してみましたが、これらのrequire the assemblies to be loaded, which I can't do (even with ReflectionOnlyLoad):私は、特にそれがすべてにロードする必要があるかどうかを決定するために、それをロードする前に、各アセンブリを分析する必要があります。私が思ったグーグル後

#if AOT 
    AotCompile 
#endif 

#if NETFX_CORE 
    DotNetCore 
#endif 

#if NO_THREADS 
    NoThreads 
#endif 

Configuration.txt

一つの解決策は、例えば、コンテンツは、プリプロセッサディレクティブに応じて生成されるのですDLLへのコンパニオン「メタ」ファイルを作成することです私はT4 Text Templatesを使用することができましたが、それはcannot access compilation symbolsのように思われます(そして、その質問で提案された回避策は私のビルドパイプラインでは機能しません)。解決策を提供するthis answerがありますが、私は多くのプロジェクトがあると考えて、膨大な時間を要する各プロジェクトファイルのXMLを手動で編集する必要があります。

ビルド時に構成データの一部またはすべてをエクスポートする別の方法はありますか?例えば定義を出力

echo $(DefineConstants) > "$(TargetDir)\$(TargetName).defines" 

、:

答えて

0

私が見つけた一つの簡単な解決策は、このビルド後のイベントを追加することですDLLの横にファイル名MyProject.definesTRACE;DEBUGがあります。

+0

私は答えとしてこれをまだマークしていませんが、他の人がより良いアプローチを見つけることができるかどうかは興味があります。 – Lazlo