首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server 2017:创建程序集失败。检查引用的程序集是否是最新的和可信的。

Server 2017:创建程序集失败。检查引用的程序集是否是最新的和可信的。
EN

Stack Overflow用户
提问于 2022-06-14 19:07:19
回答 1查看 364关注 0票数 1

我在我的研究中发现了同样的问题,但没有找到解决办法:Research Link

这个.dll是System.net.http,它是从4.6.1 .NET框架中提取的。我正在尝试在Server 2017中使用它创建一个程序集。

我已经完成了以下步骤:

创建证书(这告诉我警告:证书是expired)

  • Create登录

  • 授予不安全程序集

  • 还将我运行的数据库设置为0,尝试安装程序集(失败)

)

这是我正在执行的代码:

代码语言:javascript
复制
CREATE CERTIFICATE [MS.NETcer]
FROM EXECUTABLE FILE =
   'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.net.http.dll';

CREATE LOGIN [MS.NETcer] FROM CERTIFICATE [MS.NETcer];

GRANT UNSAFE ASSEMBLY TO [MS.NETcer];

create ASSEMBLY [System.Net.Http]  
FROM 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.net.http.dll'
WITH PERMISSION_SET = UNSAFE 

这是我的问题:

代码语言:javascript
复制
Msg 6218, Level 16, State 2, Line 15
CREATE ASSEMBLY for assembly 'System.Net.Http' failed because assembly 'System.Net.Http' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database. CLR Verifier error messages if any will follow this message
[ : System.Net.Http.SR::.ctor][mdToken=0x6000001][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::get_ResourceManager][mdToken=0x6000002][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::get_Culture][mdToken=0x6000003][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::set_Culture][mdToken=0x6000004][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::get_net_http_argument_empty_string][mdToken=0x6000005][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::get_net_http_client_absolute_baseaddress_required][mdToken=0x6000006][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::get_net_http_client_content_headers][mdToken=0x6000007][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::get_net_http_client_execution_error][mdToken=0x6000008][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::get_net_http_client_http_baseaddress_required][mdToken=0x6000009][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::get_net_http_client_invalid_requesturi][mdToken=0x600000a][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::get_net_http_client_request_already_sent][mdToken=0x600000b][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::get_net_http_client_request_headers][mdToken=0x600000c][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::get_net_http_client_response_headers][mdToken=0x600000d][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::get_net_http_client_send_canceled][mdToken=0x600000e][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::get_net_http_client_send_completed][mdToken=0x600000f][offset 0x00000000] Code size is zero.
[ : System.Net.Http.SR::get_net...

编辑1: --如果我使用4.7.2框架中的.dll,则会得到以下错误:

代码语言:javascript
复制
Msg 6586, Level 16, State 1, Line 18
Assembly 'System.Net.Http' could not be installed because existing policy would keep it from being used.

如果我按照下面的建议从C:\Windows\Microsoft.NET\Framework64\v4.0.30319,中提取.dll (而不是从引用文件夹),则会遇到这个问题。

代码语言:javascript
复制
Msg 6522, Level 16, State 1, Procedure DataRobot.pDataUpload, Line 0 [Batch Start Line 47]
A .NET Framework error occurred during execution of user-defined routine or aggregate "pDataUpload": 
System.IO.FileLoadException: Could not load file or assembly 'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. Assembly in host store has a different signature than assembly in GAC. (Exception from HRESULT: 0x80131050) See Microsoft Knowledge Base article 949080 for more information.
System.IO.FileLoadException: 
   at DataRobot.DataUpload.Upload(String directory, String proxyAddress, String apiToken)

编辑3:跟踪@所罗门以提供额外的上下文。我把我的项目建立在我的工作电脑上。server托管在另一台服务器上。我使用的.NET库位于本地C:\驱动器上。这些都是迄今为止的事实:

  • I将项目编译为.dll到Server共享驱动器
  • 我将System.net.http.dll库复制并粘贴到同一个Server共享驱动器。
  • 将System.net.http.dll添加为证书。数据库还被设置为TRUSTWORTHY.
  • I创建程序集和存储过程,以运行我编译的项目.dll.

中的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-14 21:44:25

您可能指向的是引用程序集,而不是包含实际代码的实际程序集(因此“代码大小为零”)。错误信息)。

如果您使用的是Server 2012或更高版本,则以下操作有效(并且不需要将DB设置为TRUSTWORTHY ON,因此请将TRUSTWORTHY返回到OFF):

代码语言:javascript
复制
USE [master];
CREATE CERTIFICATE [MS.NETcer]
FROM EXECUTABLE FILE =
'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Net.Http.dll';

CREATE LOGIN [MS.NETcer] FROM CERTIFICATE [MS.NETcer];

GRANT UNSAFE ASSEMBLY TO [MS.NETcer];

USE [SomeUserDB];
CREATE ASSEMBLY [System.Net.Http]  
FROM 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Net.Http.dll'
WITH PERMISSION_SET = UNSAFE;

关于编辑:

--如果我使用4.7.2框架中的.dll,则会得到以下错误:

不要尝试使用特定的.NET框架版本的.NET框架库。您需要使用当前运行server的服务器上的内容,因为Server使用的版本必须与操作系统使用的版本匹配。因此,对于系统程序集,最好从磁盘(即**C:\Windows\Microsoft.NET\Framework64\v4.0.30319** )中提取。

关于编辑2:

如果我遵循建议并从C:\Windows\Microsoft.NET\Framework64\v4.0.30319,中提取.dll,我就会遇到这个问题。

主机存储中的程序集与GAC.中的程序集具有不同的签名。

嗯。我认为GAC会从同一个目录中得到它的版本。是否可能有一个Windows更新了磁盘上的版本,而GAC还没有刷新?或者类似的东西?您能否重新启动服务器,然后再尝试加载程序集?

关于编辑3:

我将System.net.http.dll库复制并粘贴到同一个Server共享驱动器中。

不,不,不。不要复制/粘贴任何.NET框架DLL。您需要使用与Server位于同一服务器上的版本。这就是为什么您需要执行我前面提供的语句(即CREATE ASSEMBLY [System.Net.Http] FROM 'C:\Windows\Microsoft.NET\Framework64\... )。如果您使用.NET 4.5.2编译您的项目,并且承载server的服务器安装了.NET 4.8,这并不重要。只需从运行Server的服务器加载.NET框架DLL,然后加载DLL。版本差异在编译对象和Server使用(基于正在运行的服务器)之间的唯一区别是,如果您是在具有Server使用的版本中未找到的新特性的较新版本的.NET框架的机器上进行开发的。在这种情况下(这种情况很少发生),您只需在运行Server的服务器上更新.NET框架的版本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72622190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档