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

标签 c# asp.net-mvc visual-studio nuget nuget-package

我有一个使用非托管库 libtidy.dll 的应用程序。在我们的代码中使用包装器 TidyManaged 来使用它。

我们想从我们的 Team Services 私有(private)包提要中引入 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>

安装.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 源中引用新包。

When I build the solution libtidy.dll is placed in the root directory, instead of the bin directory

  • 构建后查看 libtidy(在根目录中)的属性时,Copy to output directory 设置为 Copy always
  • 当我查看项目属性时,在 build 选项卡下,Output path 设置为 bin\

谁能看出我做错了什么?

注意:此问题是此 Stack Overflow question 的后续问题- 接受答案的用户说一切都应该有效,但我仍然遇到这个问题。

据我所知,我正在严格按照他的指示...

最佳答案

按照您的步骤,我在构建解决方案后成功将libtidy.dll复制到bin目录。生成解决方案时,不会复制根目录中的 libtidy.dll。安装包时应该添加它。因为libtidy.dll是一个非托管dll,不能在Project的Reference中直接引用。我们经常通过将它们添加到项目目录中来引用此类dll。

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

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

关于c# - NuGet 包将非托管 dll 复制到根目录而不是 bin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39572337/

相关文章:

c# - 是否可以创建相同的 guid

c# - 如果应用程序是从 cmd 执行的,则写入命令行

asp.net-mvc - 为什么 Asp.net 部分 View 不返回?

c# - 无法在 Visual Studio 的 Crystal Report 中加载数据库信息

c# - 专注于控制

用于 Excel 导出的 C# OpenXML-only 特定单元格样式

c# - MVC 中的参数未从路由正确传递到 View 中

c# - 获取 lambda 表达式的表达式文本

c++ - 如何在我的代码中使用 Matlab 引擎(用于调用 `engOpenSingleUse()` )?

sql - SSMS 2008 中的#region 功能