我有一个使用非托管库 libtidy.dll
的应用程序。在我们的代码中使用包装器 TidyManaged
来使用它。
我们想从我们的 Team Services 私有(private)包提要中引入 libtidy
,以便将其放置在 bin
目录中
为此,我创建了一个 NuGet 包,如下所示:
- 创建目录
libtidy-managed
- 将
libtidy.dll
和TidyManaged.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”。
关于c# - NuGet 包将非托管 dll 复制到根目录而不是 bin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39572337/