2017-12-25 5 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 :

<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

System.Data.SQLite.Core 이후 사용은 구축 시간 논리를 내용으로 패키지를 포함, PackageReference의 기본 종속성 설정이 적합하지 않습니다 당신이 패키지를 참조하는 라이브러리를 구축하는 경우 . 기본적으로 PackageReference은 전이 참조를 위해 contentFiles, 애셋 및 분석기를 전달하지 않습니다.

편집, 그 동작을 변경하는 PackageReference에 :

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

이 패키지는 라이브러리를 통해 직접 또는 이적으로 동일 할 때 참조를 행동 할 것을 보장합니다. 특정 케이스의 경우 도 build 만 전달되기 때문에 contentFiles;analyzers이 될 수 있지만 패키지에는 build 개의 애셋 만 있으므로 문제가되지 않습니다.

자세한 내용은 Controlling dependency assets을 참조하십시오.

+0

우수 설명에 감사드립니다. – MaYaN

관련 문제