相关疑难解决方法(0)

将NuGet包中的本机文件添加到项目输出目录

我正在尝试为.Net程序集创建NuGet程序包,它会对原生的win32 dll进行pinvoke.我需要将程序集和本机dll打包,并将程序集添加到项目引用中(此部分没有问题),并且应将本机dll复制到项目输出目录或其他相关目录中.

我的问题是:

  1. 如何在没有visual studio尝试将其添加到引用列表中的情况下打包本机dll?
  2. 我是否必须编写install.ps1来复制本机dll?如果是这样,我如何访问包内容进行复制呢?

nuget nuget-package nuget-spec

112
推荐指数
6
解决办法
5万
查看次数

在Visual Studio项目中本地复制本机依赖项

我有一个混合模式C++项目,生成一个托管DLL程序集导出一些CLR类(称之为Managed.dll).这个项目使用的是原生dll(称之为Native.dll).

当我从另一个生成Client.exe的项目引用Managed.dll时,一切都按预期工作,除了我需要在与Client.exe相同的文件夹中手动复制Native.dll.

如果有办法说服VS本地复制(在Client.exe的bin文件夹中)不仅Managed.dll而且还有Native.dll?

我试图在清单中包含Native.dll作为依赖程序集,但这没有帮助.

编辑

Managed.dll将成为可再发行组件.它将安装在"C:\ Program Files ....."的文件夹中.当使用Visual Studio的开发人员添加对Managed.dll的引用时,还应将Native.dll复制到其项目的\ bin文件夹中.

.net c++ visual-studio

19
推荐指数
2
解决办法
1892
查看次数

如何在仅64位的多个平台上的Nuget中包含本机资产

我正在创建具有以下想法的NuGet包:

  • 具有平台相关的可执行文件和dll(Windows,Linux和MacOS)。
  • 本机二进制文件是64位二进制文​​件。
  • .NET Standard 2.0库以使用这些本机资源。
  • 在.NET库开发和测试期间,应将本机资源包括在构建中,以便可以使用它们。

这个想法不是要嵌入本机资源然后提取它们,而是与使用它们的.NET库一起分发。但是,我遇到了一些我想问的问题。

1.外部依赖关系的根是否有一个公认的约定?目前,我的结构是:

.\Solution.sln
.\Solution.nuspec
.\runtimes\win-x64\native\<.exe and .dll>
.\Project\Project.csproj
Run Code Online (Sandbox Code Playgroud)

.NET Standard 2.0库项目编译为Project\bin\Debug\netstandard2.0。我想知道根是否还有其他约定或名称。除了其他资源和GitHub项目,我还阅读了创建NuGet包的项目。

2..nuspec其他方式获取文件非常普通,我想知道如何安排文件引用?我阅读了Nuspec更换令牌上的说明,并且在.nuspec文件中有一节告诉您:

<files>
  <file src="bin/$configuration$/$id$.pdb" target="lib/netstandard20" />
  <file src="bin/$configuration$/$id$.dll" target="lib/netstandard20" />
  <file src="runtimes/win-x64/native/.exe" target="runtimes/win-x64/native/.exe" />
  <file src="runtimes/win-x64/native/.dll" target="runtimes/win-x64/native/.dll" />
</files>
Run Code Online (Sandbox Code Playgroud)

但是不包含本机文件。当我尝试以开始设置相对路径时也是如此..\(我仍然可能会遇到这个错误,可能会睡一会再重试)。

3.我是否应该包括某种.props文件,然后对使用Nuget库的人正确地包含包装器和本机资源?应该进行设置,以包括并设置所有本机资源的两个文件,以便将它们与其他构建工件一起复制到项目输出中。

4.我应该做些特别的安排Project.csproj吗?也许更好的问题是,我应该注意一些健壮的做法吗?我看到有一些问题和答案,例如https://github.com/aspnet/websdk/issues/204#issuecomment-302482115。或者实际上是将本机dll自动复制到Visual Studio中引用项目的bin文件夹中,自动从Nuget Package中提取本机和托管DLL。我应该提到的Project.csproj只是我设置了:

<PropertyGroup>
  <RuntimeIdentifiers>win-x64;osx.10-11-x64;ubuntu.16.04-x64;debian.8-x64</RuntimeIdentifiers>
  <GeneratePackageOnBuild>false</GeneratePackageOnBuild>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

编辑: Do!我正在尝试通过创建包dotnet pack .\Project\Project.csproj,而不使用该 …

.net nuget .net-standard

7
推荐指数
0
解决办法
1771
查看次数