Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NuGet包将非托管dll复制到根目录而不是bin_C#_Asp.net Mvc_Visual Studio_Nuget_Nuget Package - Fatal编程技术网

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
软件包。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>
然后,我使用
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;