我有一个使用非托管库libtidy.dll
的应用程序。在我们的代码中使用包装器TidyManaged
来使用它。
我们希望从我们的Team Services私有包Feed中提取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>
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
位于 root 目录中,而不是 bin 目录
libtidy
(在根目录中)的属性时,Copy to output directory
设置为Copy always
build
标签下,Output path
设置为bin\
谁能看到我做错了什么?
注意:此问题是此Stack Overflow question的后续问题 - 来自接受答案的用户说一切都应该有效,但我仍然遇到此问题。
据我所见,我按照他的指示写信......
答案 0 :(得分:2)
根据您的步骤,我在构建解决方案后成功将libtidy.dll复制到bin目录。构建解决方案时,不会复制根目录中的libtidy.dll。应该在安装软件包时添加它。因为libtidy.dll是一个非托管的dll,它无法直接在Project的Reference中引用。我们经常通过在项目目录中添加它们来引用这种类型的dll。
构建解决方案后,请检查bin目录,还应该有一个libtidy.dll,在构建解决方案时会复制它。如果没有这个dll,请检查你的step2,确保你直接把libtidy.dll,TidyManaged.dll 和Install.ps1文件放在同一个地方。项目的输出路径应为“ bin \ Debug ”。