C# .Net6 - C++/CLI Nuget 包失败

问题描述 投票:0回答:2

我在为我的 C++/CLI Visual Studio 项目创建 Nuget 包时遇到问题。

我有一个 .Net6 C# 程序集 MyNet6Lib,它引用了我的 C++/CLI dll MyClrLib.dll,它也是针对 .Net6 构建的。这实际上是一些 C++ 类的 C# 包装器。 当我将我的 C++/CLI 库打包到 Nuget 包中,并安装到 C# 程序集中时,出现运行时错误

System.IO.FileNotFoundException: '无法加载文件或程序集 'MyClrLib,版本=1.0.1.0,文化=中性,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 项目上找不到任何信息。项目属性中没有“包”选项卡。

如果有人能帮助我解决这个问题,或者指出我在哪里进行调查,我将不胜感激。

谢谢。

c# c++-cli nuget-package
2个回答
3
投票

问题已通过包含文件 Ijwhost.dll 得到解决。这是 c++/cli 库在构建为 .Net6 时运行所必需的。

我意识到这不是特定的 Nuget 包问题,而是与 .Net6 C++/CLI 项目部署相关的问题。

然而,其他人可能会遇到同样的问题,因此认为该帖子很有用。


0
投票

复制 ijwhost.dll 所需的代码应该放在您的项目文件中

<temGroup>
    <Content Include="$(NetCoreTargetingPackRoot)\Microsoft.NETCore.App.Host.$(NETCoreSdkRuntimeIdentifier)\$(BundledNETCoreAppPackageVersion)\runtimes\$(NETCoreSdkRuntimeIdentifier)\native\ijwhost.dll" Link="ijwhost.dll">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
</ItemGroup>

来源:https://github.com/AmpScm/SharpProj/issues/25#issuecomment-1482915538

© www.soinside.com 2019 - 2024. All rights reserved.