NuGet包将非托管dll复制到根目录而不是bin目录

3
我有一个应用程序,它使用未管理的库 libtidy.dll。在我们的代码中,我们使用包装器 TidyManaged 来使用它。
我们想从团队服务私人包源获取 libtidy 并将其放置在 bin 目录中。
为此,我正在创建一个 NuGet 包,具体如下:
  • 创建一个名为 libtidy-managed 的目录
  • libtidy.dllTidyManaged.dll 两个文件放入新目录中
  • 从该目录运行 nuget spec,并使用以下文件

Package.nuspec:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>libtidy-tidymanaged</id>
    <version>1.0.0</version>
    <authors>Name</authors>
    <owners>Name</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Libtidy TidyManaged</description>
    <releaseNotes>Libtidy TidyManaged</releaseNotes>
    <copyright>Copyright 2016</copyright>
    <tags>Libtidy TidyManaged</tags>
  </metadata>
  <files>
      <file src="libtidy.dll" target="content" />
      <file src="TidyManaged.dll" target="lib" />
      <file src="Install.ps1" target="tools" />
  </files> 
</package>

Install.ps1

param($installPath, $toolsPath, $package, $project)

$file = $project.ProjectItems.Item("libtidy.dll");

If ($file -eq $null)
{
    $project.ProjectItems.AddFromFile("libtidy.dll");
    $file = $project.ProjectItems.Item("libtidy.dll");
}

$file.Properties.Item("CopyToOutputDirectory").Value = [int]1;

我使用nuget pack创建包并在本地nuget feed中引用新包。

当我构建解决方案时,libtidy.dll被放置在根目录而不是bin目录

  • 在构建后查看位于根目录的libtidy属性时,复制到输出目录设置为始终复制
  • 在项目属性下的构建选项卡下,输出路径设置为bin\
有人能看出我做错了什么吗?
注意:这个问题是从这个Stack Overflow问题衍生出来的 - 接受答案的用户说一切都应该正常工作,但我仍然遇到这个问题。
就我所看到的,我完全按照他的指示操作了...
1个回答

2
根据您的步骤,我成功地在构建解决方案后将libtidy.dll复制到bin目录。当构建解决方案时,根目录中的libtidy.dll未被复制。它应该在安装包时添加。因为libtidy.dll是一个非托管dll,不能直接引用项目的引用。我们经常通过将这种类型的dll添加到项目目录中来引用它们。

构建解决方案后,请检查bin目录,应该还有一个libtidy.dll,这是在构建解决方案时复制的。如果没有这个dll,请检查步骤2,确保您将libtidy.dll、TidyManaged.dll和Install.ps1文件放在同一个目录中。项目的输出路径应该是“bin\Debug”。

以下是我的软件包结构,请与您的软件包进行比较。 enter image description here


谢谢您的回复。我注意到在脚本执行后,libtidy现在在bin目录中,正如预期的那样。您能否建议如何使用PowerShell脚本从根目录中删除libtidy?(我从未真正使用过PowerShell) - Vinyl Warmth
1
很抱歉,我们无法从根目录中删除libtidy。因为它是一个未受管理的dll,我们需要通过将其添加到根目录来引用它。当您重新构建项目时,bin文件夹会被清除。如果从根目录中删除libtidy,则在重新构建项目时,libtidy将不会复制到bin文件夹中。 - Weiwei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接