小编Log*_*n K的帖子

Nuget 包在构建时不复制本机 DLL

我正在尝试创建一个托管库并将其与 Nuget 打包。托管库使用另一个用 C 编写的 DLL,并通过 [DllImport] P/Invoke 调用进行调用。在项目的根目录中,我有一个类似以下的文件夹结构:

  • 根/运行时/win-x86/native/file.dll
  • 根/运行时/win-x64/native/file.dll

我没有使用 .nuspec 文件,而是从 .NET STandard 2.0 项目的 .csproj 文件生成 Nuget 包。我将这些文件包含在 .csproj 文件中。

<ItemGroup>
    <Content Include="runtimes\**" PackagePath="runtimes" Visible="true" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

nuget 包在 lib/netstandard2.0 目录中具有托管 DLL,甚至在 root/runtimes/RID/native 目录中具有非托管 DLL。使用此 nuget 包的项目可以完美安装并构建,没有错误。

消费者将与之交互的托管 DLL 尝试像这样使用本机 DLL

[DllImport("file_name.dll")]
private static extern IntPtr CscanHOpen(string connectionString);
//...
public void Open(string connectionString, int port) {
    _handle = CscanHOpen(connectionString, port);
}
Run Code Online (Sandbox Code Playgroud)

我从安装 nuget 包的项目中收到“文件无法找到”错误,当我查看构建目录时,我没有看到该非托管 DLL。我尝试使用目标文件将非托管 DLL 复制到使用项目的输出目录,但它从未显示。

c# nuget .net-standard-2.0

5
推荐指数
1
解决办法
5031
查看次数

Docker - dotnet 恢复无法连接到私有源

从我的 Dockerfile调用dotnet restore <project>会导致NU1301: Unable to load the service index for source错误。我已经解决了许多建议的类似问题,并且仍然存在问题。以下是我所能提供的有关我尝试过的尽可能多的信息:

  • Docker 引擎的 DNS 设置为“8.8.8.8”
  • 使用Linux容器
  • RUN ping google.com成功(这样我就可以访问互联网)
  • nuget.org击球效果非常好
  • nuget.config 文件当前包含凭据以使其正常工作
    • 一旦我开始工作,这将被删除以采用不同的方法
    • 这些是我在主机上开发期间使用的相同凭据(用户名/PAT)
  • RUN curl <nuget_feed_url>成功
  • 运行恢复命令--verbosity detailed不会提供任何其他错误消息,但会提供一条错误消息

这是有问题的 Dockerfile 部分

FROM mcr.microsoft.com/dotnet/aspnet:6.0.13 AS base
# Create dockeruser in base layer
RUN addgroup --system --gid 1000 dockergroup \
    && adduser --system --uid 1000 --ingroup dockergroup --shell /bin/sh dockeruser

WORKDIR /app
EXPOSE 8080

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
# Arguments are …
Run Code Online (Sandbox Code Playgroud)

c# docker .net-core

2
推荐指数
1
解决办法
949
查看次数

标签 统计

c# ×2

.net-core ×1

.net-standard-2.0 ×1

docker ×1

nuget ×1