2017-10-27 10 views
0

NuGetパッケージには、1つのマネージドDLLと多数のネイティブDLLが含まれています。管理対象DLLは、pinvokeを使用してネイティブDLLを呼び出します。私は正常に次のディレクトリ構造とNuGetパッケージにすべてをパッケージ化している:私はこれまで説明してきたこのNuGetパッケージのインストール時にネイティブDLLがインポートされない

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
    <NativeLibs Include="$(MSBuildThisFileDirectory)*.*" /> 
    <None Include="@(NativeLibs)"> 
     <Link>%(FileName)%(Extension)</Link> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </None> 
    </ItemGroup> 
</Project> 

すべては命令がhereを見つけ、次のように

lib 
    Managed.dll 
build 
    Unmanaged1.dll 
    Unmanaged2.dll 
    MyNuGetID.targets 

は私の.targetsファイルが見えます。私が読んだところでは、Visual StudioがこのNuGetパッケージをインストールするときに、.csprojファイルに ".txt"ファイルを読み込んですべてのアンマネージドDLLを私のbin\Debugディレクトリにコピーする "プロジェクトのインポート"セクションを挿入する必要があります。私は過去にVisual Studio 2015を使用してこれを成功させましたが、何らかの理由でVisual Studio 2012を使用している私の現在の設定では機能しません。私のNuGetパッケージがインストールされ、Reference Include=Managed...セクションが.csprojファイルに追加されますが、.targetsファイルは決してImportであり、アンマネージDLLはコピーされません。

注:

  • マイ.targetsファイルには、私のNuGetパッケージIDと同じ名前を持っています。
  • 私のVisual Studioのインストール は、私は、問題は、Visual StudioやNuGetの私のバージョンに関係する 何かを持っている疑いがあるNuGetバージョン2.0
  • を使用しています。
+0

私はちょうどビルドディレクトリの.targetsファイルの自動インポート機能が、リリースノートに従ってNuGetバージョン2.5まで追加されていないことを発見しました。https://docs.microsoft.com/en-us/nuget/release-notes/nuget -2.5 – agruwell

答えて

0

質問に私のコメントで述べたように、NuGetバージョン2.0に付属しているVisual Studio 2012では、ターゲットまたは.propsファイルをNuGetパッケージのビルドディレクトリに配置する機能がサポートされていません。その機能が追加される前にNuGetパッケージからネイティブDLLをコピーした方法を理解する必要がありました。明らかに、NuGetパッケージのtoolsディレクトリにあるpowershellスクリプトを使用して実行されました。ここでは、正常に私のVisual Studioプロジェクトの出力ディレクトリに私のネイティブのDLLのすべてを上書きコピーPowerShellスクリプトは次のとおりです。

#File: tools\Install.ps1 
param($installPath, $toolsPath, $package, $project) 
$nativeBinDirectory = Join-Path $installPath "build" 
$projectRoot = $project.Properties.Item("FullPath").Value 
$binDirectory = Join-Path $projectRoot "bin\Debug" 
Copy-Item $nativeBinDirectory\* $debugDirectory 

私の新しいNuGetパッケージのディレクトリ構造は次のようになります。

lib 
    Managed.dll 
build 
    Unmanaged1.dll 
    Unmanaged2.dll 
tools 
    Install.ps1 
関連する問題