这让我疯狂了几个月,但我仍然无法实现它。我的托管库是从 Nuget 包中提取的,但不是从本地库中提取的。
我们有一堆由另一家公司提供的托管和本地库。
我们都有 x86和 x64他们的版本。为了在 ASP.NET Core 项目中使用它们,我必须创建一个 Nuget 包。
我的架构是:
\bin\Debug\net461\win7-x64 )。build文件夹 targets将它们复制到 $(OutputPath) 的文件(甚至不是运行时文件夹)xproj在我的网站中获取目标文件 $(USERPROFILE)\.nuget\packages\文件夹并执行它 bin 中提取的 native DLL文件夹到 runtime一 project.json 中的一些配置将它们直接复制到运行时文件夹中(老实说,我不记得我为这部分尝试过的所有事情)但这总是失败。即使我指定了 SkipUnchangedFiles="true"在我的目标文件中,这只是被忽略,我的 DLL 会在每次构建期间复制到我的 bin 文件夹中。targets文件Next, C++ and JavaScript projects that might consume your NuGet package need a .targets file to identify the necessary assembly and winmd files. (C# and Visual Basic projects do this automatically.)
runtimes文件夹以自动提取 native DLL。但是,我从来没有像解释的那样获得成功的结果。现在该页面已被删除并替换为this one解释这么少,不谈这个runtimes文件夹。runtimes native DLL 的文件夹和 lib一个用于管理,但我不是 100% 确定。 (我还应该使用 build 文件夹吗?)build/native 以及 runtimes 下的 natives 文件夹有什么意义)
The architecture is ignored by the compiler when creating an assembly reference. It's a load time concept. The loader will prefer an architecture specific reference if it exists.
One trick you can use to produce an AnyCPU assembly is to use corflags to remove the architecture from your x86 assembly. EG: corflags /32BITREQ- MySDK.dll. Corflags is part of the .NET SDK and can be found in VS's developer command prompt.
AnyCPU (不知道它是否对 x64 DLL 起作用,但我没有收到错误)然后在我的 Nuget 包中尝试了几种不同的体系结构,但仍然无法正常工作。win7-x64 ,所以我决定明确指定它以防万一"runtimes": {
"win7-x64": {}
},
所以这是我在 Nuget 包中进行所有尝试时使用的运行时标识符。但是我不关心 Windows 版本。我实际上更喜欢使用 win-x86 或 win-x64,但根据 this page,它似乎是一个无效值。Windows RIDs
Windows 7 / Windows Server 2008 R2
- win7-x64
- win7-x86
Windows 8 / Windows Server 2012
- win8-x64
- win8-x86
- win8-arm
Windows 8.1 / Windows Server 2012 R2
- win81-x64
- win81-x86
- win81-arm
Windows 10 / Windows Server 2016
- win10-x64
- win10-x86
- win10-arm
- win10-arm64
win-x64 RID 或看看我是否可以包含一次我的托管库,无论 .NET Framework 版本是什么。最佳答案
我将尽可能详细地解释我所经历的所有痛苦和解决方案。在我的示例中,我使用简单的文本文件 AAA86.txt , AAA64.txt和 AAAany.txt而不是 native DLL 来简单地演示提取过程。
您需要知道的第一件事:
如果您尝试混合 native NuGet 的架构与 lib包含一些托管库的文件夹,它不会工作

在这种情况下,您的托管 DLL 将被复制到您项目的输出目录,而不是您的 native 目录。
感谢 Jon Skeet 为我指出了好的方向,建议我看看 Grpc.Core package .诀窍是创建一个 targets将处理 DLL 提取的文件。

你的目标文件应该包含这样的内容
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Condition=" '$(Platform)' == 'x64' ">
<Content Include="$(MSBuildThisFileDirectory)..\..\runtimes\win-x64\native\AAA64.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>AAA64.txt</Link>
</Content>
</ItemGroup>
<ItemGroup Condition=" '$(Platform)' == 'x86' OR '$(Platform)' == 'AnyCPU' ">
<Content Include="$(MSBuildThisFileDirectory)..\..\runtimes\win-x86\native\AAA86.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>AAA86.txt</Link>
</Content>
</ItemGroup>
</Project>
.targets文件的名称与您的 AssemblyName 相同。因此,如果您的程序集名称是 DemoPackage ,你的目标文件应该命名为 DemoPackage.targets .否则,.targets在另一个项目中引用包时可能不会应用文件。
win7-x64 文件夹......)
project.json也完全没用{
"buildOptions": {
"platform": "x64"
}
}
win和/或 win-x64"runtimes": {
"win": {},
"win-x64": {}
}
win7-x64 .但是如果你加上 win10-x64当你在 Windows 10 机器上时,这将被使用dotnet build -c debug -r win
targets文件将接收您机器的架构(在我的情况下为 x64)而不是 AnyCPU正如我所期待的runtimes/RID/native,提取将在没有目标文件的情况下工作。win-x64正如我告诉您的那样,使用 Visual Studio 构建始终创建的运行时文件夹是 win7-x64 ,无论我选择哪种配置。如果我只有一个 win RID 在我的包中,然后它会成功被选中。
关于c# - 从 Nuget 包中自动提取 native 和托管 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40104838/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba
我有一个.pfx格式的证书,我需要使用ruby提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功