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打包并安装第三方依赖项,不在bin文件夹中_C#_Nuget_Csproj - Fatal编程技术网

C# Nuget打包并安装第三方依赖项,不在bin文件夹中

C# Nuget打包并安装第三方依赖项,不在bin文件夹中,c#,nuget,csproj,C#,Nuget,Csproj,我正在尝试创建一个可以包含和部署第三方依赖项的NuGet包,这些是我的程序需要运行的dll和可执行文件。不过,在这个问题上有一些警告 安装软件包时,DLL需要位于bin文件夹上方的一个目录中,我已经可以将它们安装到bin文件夹中,这不是我需要的。(这使得这个问题与我发现的其他问题不同) 如果可能的话,我更喜欢通过.csproj文件而不是.nuspec文件使用打包 如果我不能把它们放在一个层次上,我可能会把它们安装到bin文件夹中的一个文件夹中。这些要求有点奇怪,但我被已经完成的工作束缚住了,没有

我正在尝试创建一个可以包含和部署第三方依赖项的NuGet包,这些是我的程序需要运行的dll和可执行文件。不过,在这个问题上有一些警告

  • 安装软件包时,DLL需要位于bin文件夹上方的一个目录中,我已经可以将它们安装到bin文件夹中,这不是我需要的。(这使得这个问题与我发现的其他问题不同)
  • 如果可能的话,我更喜欢通过.csproj文件而不是.nuspec文件使用打包
  • 如果我不能把它们放在一个层次上,我可能会把它们安装到bin文件夹中的一个文件夹中。这些要求有点奇怪,但我被已经完成的工作束缚住了,没有能力改变它。

    我尝试过的许多事情中的一个小例子:

        <Content Include="x86\SQLite.Interop.dll">
            <buildAction>Embedded Resource</buildAction>
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
            <copyToOutput>true</copyToOutput>
            <PackagePath>lib</PackagePath>
            <PackageOutputPath>..\SQLite</PackageOutputPath>
            <Pack>true</Pack>
        </Content>
    
    
    嵌入式资源
    保存最新
    真的
    解放党
    ..\SQLite
    真的
    
    使用以下方法:

    <ItemGroup>
     <Content Include="x86\SQLite.Interop.dll">
            <buildAction>Embedded Resource</buildAction>
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
            <copyToOutput>true</copyToOutput>
            <PackagePath>lib\$(targetframework)</PackagePath>        
            <Pack>true</Pack>
       </Content>
     </ItemGroup>
     <PropertyGroup>
        <PackageOutputPath>..\SQLite</PackageOutputPath>
     </PropertyGroup>
    

    然后,右键单击项目-->打包。您不应该使用任何其他nuspec文件进行打包。

    Hi,有关于它的更新吗?@cameroney您是否在.NET Core/5+项目中使用此文件?本机依赖项加载的工作方式有点不同,您可以使用运行时文件夹来确保目录布局与.NET在解析本机依赖项时所查找的内容相匹配。我想我现在不会这样做,但我想了解更多有关本机依赖项的信息。听起来是一个可能的解决方案。检查了它是一个.Net框架项目。我想你使用的是类库项目,对吗?您展示的是新sdk项目的包特性。如果您使用的是非sdk,那么应该使用。或者使用显示的内容来获取所需内容。这不起作用,没有SQLite文件夹在其中创建依赖项。我创建了一个新版本的软件包,从.nuget\packages文件夹中删除了所有旧版本的软件包,并安装了它,但没有用。像new sdk net472 project?您所做的不能是非sdk网络框架项目<代码>PackageOutputPath不能写入项下。它应该是一个财产。检查我的答案。另外,当您创建nupkg时,请使用7zip解包nupkg文件,并且您可以在
    lib\net472
    文件夹下找到
    SQLite.Interop.dll
    PackageOutputPath
    用于打包项目时nupkg文件的生成路径。当您尝试我的方法时,nupkg将位于
    \SQLite
    下。好的,所以我再次尝试,但仍然不起作用,但我认为我们不在同一页上。使用
    PackageOutputPath
    我能够让包输出一级。但这不是目标,目标是让dll在安装时部署一级。我不认为我需要的是
    PackageOutputPath
    。它必须是另一个属性。一个明确的问题:您使用的是非sdk项目样式,请共享解决方案资源管理器的图片和整个csrpoj文件?
    <ItemGroup>
         <Content Include="x86\SQLite.Interop.dll">
                <buildAction>Embedded Resource</buildAction>
                <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
                <PackageCopyToOutput>true</PackageCopyToOutput>
           </Content>
    </ItemGroup>