我正在考虑使用 Consul library for .NET支持NETSTANDARD1.3。当我添加包时,我看到它取决于 System.Net.Http.WinHttpHandler ,它又添加了 win32 原语包。
我找不到任何文档说明这些包如何在 Linux 上工作。我假设它们不会工作,但它们可能会提供垫片层。
有人对这些包有任何经验吗?
编辑:
作为独立部署部署到 Ubuntu 会产生以下结果。
未处理的异常:System.TypeInitializationException:“System.Net.Http.CurlHandler”的类型初始值设定项引发异常。 ---> System.TypeInitializationException: 'Http' 的类型初始值设定项抛出异常。 ---> System.TypeInitializationException:“HttpInitializer”的类型初始值设定项抛出异常。 ---> System.DllNotFoundException: 无法加载 DLL 'System.Net.Http.Native': 找不到指定的模块。
(HRESULT 异常:0x8007007E)
在 Interop.HttpInitializer.EnsureCurlIsInitialized()
在 Interop.HttpInitializer..cctor()
--- 内部异常堆栈跟踪结束 ---
在 Interop.HttpInitializer.Initialize()
在 Interop.Http..cctor()
--- 内部异常堆栈跟踪结束 ---
在 Interop.Http.GetSupportedFeatures()
在 System.Net.Http.CurlHandler..cctor()
--- 内部异常堆栈跟踪结束 ---
在 System.Net.Http.CurlHandler..ctor()
在 Consul.ConsulClient.ConsulClientConfigurationContainer..ctor()
在 Consul.ConsulClient..ctor(Action`1 configOverride,Action`1 clientOverride,Action`1 handlerOverride)
在 REstateScratchPad.Program.Main(String[] args)
中止(核心转储)
最佳答案
我认为您不需要安装 SDK,因为我能够让它正常工作。您使用的是哪个版本的 Ubuntu?您是否遵循了 https://learn.microsoft.com/en-us/dotnet/articles/core/deploying/ 中详述的步骤? (下面还有详细说明)?
我这样说是因为我构建了一个测试应用程序,它在根本没有安装 SDK 的情况下也能正常工作:
根据上述指南编辑您的
project.json
并删除"platform": true
。添加一个runtimes:{}
元素,对我来说是:“运行时”:{ “win81-x64”:{}, “ubuntu.14.04-x64”:{} }
在我这样做之后,我能够进行
dotnet restore
和dotnet build -r ubuntu.14.04-x64
工作,但只掉了 3目录中的文件,没有 SDK 无法运行。- 我做了
dotnet publish -c release -r ubuntu.14.04-x64
并启动了一个运行 Ubuntu 14.04 的 Vagrant box,apt-get install libunwind8
,然后运行我的程序:/vagrant/bin/release/netcoreapp1.0/ubuntu.14.04-x64/publish/ConsoleApp1
。该程序所做的只是位于 Consul.NET project 的 README.md 中的示例函数。 ,并且在我在 VM 中启动 Consul 副本后,它能够正确打印“Hello Consul”。
关于linux - 依赖System.Net.Http.WinHttpHandler的库能否部署到Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42472536/