C# NuGet包将非托管dll复制到根目录而不是bin
我有一个应用程序使用非托管库C# NuGet包将非托管dll复制到根目录而不是bin,c#,asp.net-mvc,visual-studio,nuget,nuget-package,C#,Asp.net Mvc,Visual Studio,Nuget,Nuget Package,我有一个应用程序使用非托管库libtidy.dll。在我们的代码中,我们使用包装器TidyManaged来使用它 我们希望从我们的团队服务私有包提要中拉入libtidy,以便将其放置在bin目录中 为此,我创建了一个NuGet包,如下所示: 创建目录libtidy-managed 将libtiy.dll和TidyManaged.dll都放入新目录 使用以下文件从此目录运行nuget spec 软件包。nuspec: <?xml version="1.0"?> <packag
libtidy.dll
。在我们的代码中,我们使用包装器TidyManaged
来使用它
我们希望从我们的团队服务私有包提要中拉入libtidy
,以便将其放置在bin
目录中
为此,我创建了一个NuGet包,如下所示:
- 创建目录
libtidy-managed
- 将
和libtiy.dll
都放入新目录TidyManaged.dll
- 使用以下文件从此目录运行
nuget spec
<?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>
然后,我使用nuget pack
创建包,并在本地nuget提要中引用新包
当我构建解决方案时,libtidy.dll
被放置在root目录中,而不是bin目录中
- 在构建后查看
(根目录中)的属性时,libtidy
设置为Copy to output directory
Copy always
- 当我查看项目属性时,在
选项卡下,build
被设置为Output path
bin\
据我所知,我完全按照他的指示行事…根据您的步骤,在构建解决方案后,我成功地将libtiy.dll复制到bin目录。生成解决方案时,不会复制根目录中的libtidy.dll。应在安装软件包时添加它。因为libtiy.dll是非托管dll,无法在项目引用中直接引用。我们经常通过在项目目录中添加DLL来引用这种类型的DLL 构建解决方案后,请检查bin目录,应该还有一个libtidy.dll,它在构建解决方案时复制。如果没有此dll,请检查步骤2,确保将libtiy.dll、TidyManaged.dll和Install.ps1文件直接放在同一个目录中。项目的输出路径应该是“bin\Debug” 以下是我的包结构,请与您的包进行比较。
谢谢您的回复。我注意到,脚本执行后,
libtidy
现在如预期的那样位于bin目录中。您能否建议如何使用powershell脚本从根目录中删除libtidy
?(我从未真正使用过powershell)恐怕我们无法从根目录中删除libtidy。因为它是一个非托管dll,我们需要通过将其添加到根目录来引用它。而bin文件夹将在重建项目时被清理。如果从根目录中删除了libtidy,则在重建项目时,libtidy不会复制到bin文件夹。
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;