我在为我的C++/CLI Visual项目创建Nuget包时遇到了问题。
我有一个.Net6 C#程序集MyNet6Lib,它引用了我的C++/CLI MyClrLib.dll,它也是针对.Net6构建的。这实际上是一些C#类的C++包装器。当我将C++/CLI库打包到Nuget包并安装到C#程序集中时,我会得到一个运行时错误
System.IO.FileNotFoundException:“无法加载文件或程序集”MyClrLib、Version=1.0.1.0、Culture=neutral、PublicKeyToken=null“。系统找不到指定的文件。
当我从C#项目直接引用C++/CLI项目时,C++/CLI库运行良好,但在我的Nuget包中安装时却不能运行。
C#项目可以针对dll构建,但在运行时失败。
MyNet6Lib和MyClrLib的nuspec文件如下所示。
Net6Lib.nuspec
<?xml version="1.0"?>
<package >
<metadata>
<id>MyNet6Lib</id>
<version>1.0.2</version>
<title>MyNet6Lib</title>
<authors>Me</authors>
<description>My NET6 Lib.</description>
<releaseNotes>First release</releaseNotes>
<copyright>Copyright 2022</copyright>
</metadata>
<files>
<file src=".\bin\x86\$configuration$\net6.0\MyNet6Lib.dll" target="lib\netcoreapp6.0\MyNet6Lib.dll"/>
</files>
</package>
MyClrLib.nuspec
<?xml version="1.0"?>
<package >
<metadata>
<id>MyClrLib</id>
<version>1.0.2</version>
<title>MyClrLib</title>
<authors>Me</authors>
<description>My CLR Lib.</description>
<releaseNotes>First release</releaseNotes>
<copyright>Copyright 2022</copyright>
</metadata>
<files>
<file src="..\$configuration$\MyClrLib.dll" target="lib\netcoreapp6.0\MyClrLib.dll"/>
</files>
</package>
当构建为.Net4.8时,我没有这个问题,但是最近我已经移植到.Net6了。奇怪的是,直接项目引用工作,而不是从Nuget包中安装,因为相同的dll被复制到构建位置。
有很多关于为.Net程序集创建Nuget包的信息,但我在C++/CLI项目上找不到任何信息。在项目属性中没有“包”选项卡。
如果有人能帮我解决这个问题,或者为我指明调查的方向,我将非常感激。
谢谢。
发布于 2022-06-16 11:52:10
通过包含文件Ijwhost.dll解决了这个问题。这是c++/cli库在构建为.Net6时运行的必要条件。
我意识到这不是一个特定的Nuget包问题,而是一个与部署.Net6 C++/CLI项目有关的问题。
然而,其他人可能会遇到同样的问题,因此认为这个帖子是有用的。
https://stackoverflow.com/questions/72635141
复制相似问题