2017-12-25 29 views
1

私はちょうどcsprojフォーマットに移行したクラスライブラリを持っています。このライブラリはSQLite.Coreに依存しています。私のパッケージを追加し、任意のプロジェクトのために、出力フォルダにコピー取得するために使用されるネイティブの依存関係x64/SQLite.Interop.dllx86/SQLite.Interoop.dllを持って新しいCSPROJクラスライブラリにネイティブDLLを含むNuGetパッケージを含めるにはどうすればよいですか?

SQLiteの。私はNuGetとしての私のライブラリを構築することができ、新たなcsprojに移行した後

<Import Project="..\packages\System.Data.SQLite.Core.1.0.106\build\net451\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.106\build\net451\System.Data.SQLite.Core.targets')" />

:これは、自動的に古いcsprojファイルに次のインポートを含むことによってNuGetでの世話をしました。依存関係として正しくSQLite.Coreが含まれていますが、私のNuGetライブラリを消費する人は、出力フォルダにcoppiedされたネイティブ依存関係を取得しません。

一方、コンシューマが最初にSQLite.Coreを追加した場合、私のパッケージをすべて追加すると正しく動作します。

マイグレーション前にどのように動作を復元できますか?以下は、移行csprojさ:System.Data.SQLite.Coreがコンテンツにパッケージを含めるようにビルド時にロジックを使用していますので、あなたはそのパッケージを参照するライブラリを構築する場合

<Project Sdk="Microsoft.NET.Sdk"> 

    <PropertyGroup> 
    <PackageId>My.Library</PackageId> 
    <Description>Some Library.</Description>   
    </PropertyGroup> 

    <PropertyGroup> 
    <TargetFramework>net452</TargetFramework>  
    <AssemblyName>My Library</AssemblyName>  
    </PropertyGroup> 

    <ItemGroup>  
    <PackageReference Include="System.Data.SQLite.Core" Version="1.0.106" /> 
    </ItemGroup> 

    <ItemGroup> 
     <Reference Include="Microsoft.CSharp" /> 
    </ItemGroup>  

</Project> 

答えて

2

は、PackageReferenceのデフォルトの依存関係の設定は良いフィットではありません。デフォルトでは、PackageReferenceは、推移的な参照のためにcontentFiles、アセットとアナライザーを転送しません。このパッケージは、あなたのライブラリーを経由する場合、参照を直接または推移まったく同じように動作することを保証します

<PackageReference Include="System.Data.SQLite.Core" Version="1.0.106" PrivateAssets="none"/> 

:あなたのPackageReferenceに編集、その動作を変更するには

。具体的なケースでは、のみが転送される必要がありますが、パッケージにはbuildのアセットしか含まれていないため、PrivateAssetscontentFiles;analyzersとなる可能性があります。

詳細については、Controlling dependency assetsを参照してください。

+0

優秀、説明していただきありがとうございます。 – MaYaN

関連する問題