2015-11-18 2 views
7

混合(管理およびネイティブ)コードを含む.NET4.0 DLLからNuGetパッケージを作成しました。Visual C++ 2013ランタイムに依存するNuGetパッケージ

ネイティブコードが.NET4.0 DLL内のパッケージ化が、私はNuGetパッケージで再頒布可能パッケージ化および/またはユーザーに警告するためのいずれかの方法をブレインストーミングしようとしているVisual C++ 2013 Redistributable

への依存性を持ってい彼らはそれを必要としているが、私は空白を描いている。

誰でもアイデアがありますか?

+0

これを隠すことをお勧めしますか? CRTだけではなく、簡単に解決できます。また、クライアントプロジェクトのPlatformターゲット設定にも強く依存しています。あなたが純粋なラッパーを持っていない場合、非常に難しいです。基本的なアドバイス[この記事では](http://stackoverflow.com/a/28771413/17034)。 –

+0

私は必ずしも隠したくはありませんが、私は少なくとも通知したいと思います。それ以外の場合、私はユーザーに「Y U NO Work」タイプの質問で技術サポートを打つ –

答えて

1

私は実際にこの種の自分を解決しました。 VCppランタイムをNuGetパッケージに依存するソリューションとして見つけることはできませんでしたが、Visual C++ 2013ランタイムが必要であることをユーザーに警告するソリューションを見つけました。

私はVC++ランタイムを必要とするコンポーネント/ライブラリの起動時に、静的に、一度このコードを実行します。

private static void AssertVcppDependencies() 
    { 
     var system32Path = Environment.GetFolderPath(Environment.SpecialFolder.SystemX86); 
     var system64Path = Environment.GetFolderPath(Environment.SpecialFolder.System); 

     string platform = Environment.Is64BitProcess ? "x64 and x86" : "x86"; 
     bool success = File.Exists(Path.Combine(system32Path, MSVCP120DllName)); 

     if (Environment.Is64BitProcess) 
     { 
      success &= File.Exists(Path.Combine(system64Path, MSVCP120DllName)); 
     }    

     if (!success) 
     { 
      throw new InvalidOperationException("This Application Requires the Visual C++ 2013 " + platform + 
       " Runtime to be installed on this computer. Please download and install it from https://www.microsoft.com/en-GB/download/details.aspx?id=40784"); 
     } 
    } 

これは、彼らがランタイムをインストールする必要があり、あなたのNuGetパッケージを消費しているすべての開発者に警告しなければなりません。