如何将SQLite.Interop.dll添加到Nuget包中,这样我就无法添加'无法添加引用'错误?

时间:2018-02-02 10:09:26

标签: c# sqlite nuget interop

我有一个Nuget包,其中包含我想在解决方案之间共享的测试助手类。当我尝试添加包时,我收到此消息:

  

install-package:无法添加对' SQLite.Interop'。

的引用      

在行:1字符:1

     

+ install-package' c:\ work \ directory_name \ package_name.nu ...

     

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~

     

+ CategoryInfo:NotSpecified:(:) [Install-Package],Exception

     

+ FullyQualifiedErrorId:NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand

我的Nuget包有一个C#test helper项目,引用了

  • System.Data
  • System.Data.DataSetExtensions
  • System.Data.SQLite

packages.config包含

<package id="System.Data.SQLite" version="1.0.65" targetFramework="net451" />

.NET项目包括

SQLite.Interop.dll作为文件

BuildAction:无

复制到输出目录:始终复制

Nuite包中包含SQLite.Interop.dll。

不言而喻,在测试助手项目(在Nuget包中)或我试图将Nuget包添加到的项目中没有对SQLite.Interop的引用。

我正在使用带有nuget pack的nuspec文件来创建包。

这是nuspec文件定义:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>...</id>
    <version>1.0.0</version>
    <title>...</title>
    <authors>...</authors>
    <owners>..</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>...</description>
    <copyright>...</copyright>
    <releaseNotes>
    </releaseNotes>
  </metadata>
  <files>
    <file src="build\bin\**" target="lib\net45" />
    <file src="package_name.targets" target="build"/>
  </files>
</package>

项目中没有.sdf文件

关于如何设置这个Nuget包的任何想法,所以我可以将它添加到其他项目并将SQLite.Interop.dll复制到它们的输出目录中?

1 个答案:

答案 0 :(得分:0)

事实证明,所需要的只是对我的nuspec和目标文件的一个小改动。

通过从.lib目录中排除SQLite.Interop.dll,Nuget不再尝试在目标项目中添加对.dll的引用。

我仍然可以将interop dll放在.content目录中,然后使用.targets文件将其包含在目标项目中。

Nuspec文件

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>...</id>
    <version>1.0.0</version>
    <title>...</title>
    <authors>...</authors>
    <owners>..</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>...</description>
    <copyright>...</copyright>
    <releaseNotes>
    </releaseNotes>
  </metadata>
  <files>
    <file src="build\bin\**" target="lib\net45" exclude="build\bin\SQLite.Interop.dll" />
    <file src="build\bin\SQLite.Interop.dll" target="content"/>
    <file src="package_name.targets" target="build"/>
  </files>
</package>

定位文件

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <None Include="$(MSBuildThisFileDirectory)\..\content\SQLite.Interop.dll">
      <Link>SQLite.Interop.dll</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>