我试着去谷歌 . Microsoft Connect不接受Service Bus的错误 . Azure门户发送到MS论坛或StackOverflow - 所以我在这里 .
问题实际上在 Headers 中: how do I report a bug with Service Bus?
(不是Azure版本,而是您在本地安装的版本)
以下是问题所在:
-
Microsoft.Cloud.ServiceBus.dll
引用Microsoft.Cloud.Common.AzureStorage.dll
. 它使用该程序集中的一种类型 - 即StorageAccountInfo
. 它是配置部分(即NamespacePolicyDataStoreFactorySection.Parameters.BlobStorageAccountInfo
)的一部分,但显然只在Azure环境中有意义,并且从未在内部部署场景中使用过 . -
但是这里有一个问题:
Microsoft.Cloud.Common.AzureStorage.dll
实际上并没有附带Service Bus 1.1 . 我试图在各种SDK和Azure工具包,样本和诸如此类(我有很多)以及在线等方面找到它 - 并找到有关该DLL的zippo信息或从何处获取它 . This是我发现它的唯一地方 . -
尽管本身就是一个WTF,但DLL的缺失并没有真正阻止任何工作:在内部部署场景中,任何代码都没有触及该类型,因此没有任何抱怨 .
-
但这是第二个问题:
mscorlib.dll
v4.6.7.0(与VS2015 CTP5一起提供)与之前的版本相比略有变化,4.0.30319.34014, - 在System.Attribute.InternalGetCustomAttributes(PropertyInfo,Type,bool)
,更准确地说是this line . 该行在mscorlib
的上一版本中不存在,一切都很好 . 但现在它确实存在,导致属性类型被触及,这导致加载DLL失败,因为DLL不存在 . -
所以整个过程从加载配置部分
NamespacePolicyDataStoreFactorySection
开始,其工作方式如下:
ConfigurationManager.GetSection ->
... ->
BaseConfigurationRecord.GetSectionRecursive ->
... ->
BaseConfigurationRecord.CallCreateSection ->
MgmtConfigurationRecord.CreateSection ->
ConfigurationElement.Reset ->
ConfigurationElement.get_Properties ->
ConfigurationElement.PropertiesFromType ->
ConfigurationElement.CreatePropertyBagFromType ->
Attribute.GetCustomAttribute (for property BlobStorageAccountInfo of type StorageAccountInfo) ->
... ->
Attribute.InternalGetCustomAttributes(PropertyInfo) ->
Attributes.GetIndexParameterTypes ->
RuntimePropertyInfo.GetIndexParameters ->
... ->
RuntimeMethodInfo.GetParameters ->
... ->
kaboom! (touches the return type, tries to load DLL containing it, fails)
有些(徒劳)尝试解决方法
-
从配置中删除配置部分 . 不幸的是,服务总线在这方面不是很容错的:当部分不存在时,NRE失败 . 也不可能提供备用配置部分"handler",因为在.NET配置系统"handler"和"data"是相同的事情 .
-
提供所需类型的假DLL . 不能这样做,因为一切都是强烈命名的 .
-
在某处找到丢失的DLL . 试过并失败了 . 网上没有提到DLL,更不用说比特了 .
细心的读者可能会问:哇,等一下! VS2015 CTP5?!你是说你在工作机器上安装了预发布软件?!那么,当然它不会教你成为早期的采用者!
细心的读者绝对是正确的:完全是我的错,我知道潜在的危险,无论如何我做了,为我服务 .
但那不是重点 . 我安装预发布软件不会降低引用DLL的WTFness,但不会降低它的运输速度 . 虽然我个人会很好,但我只想确保在.NET 5发布并点击Windows Update时突然停止工作 .
3 回答
我知道这个问题的答案很晚,实际上并不是问题的答案,但今天,在使用Windows Service Bus 1.1的PC上安装VS 2015 RC并重新启动PC后,我的服务总线网关服务停止工作,我经历了这个问题中描述的所有痛苦,但最终可以从假装配场景中找到解决方案 . 这是解决方案:
使用版本2.1.0.0创建了伪装配Microsoft.Cloud.Common.AzureStorage.dll,并使用新的密钥文件对其进行了签名 .
使用以下命令对其进行反汇编:ildasm / all /out=azurestorage.il Microsoft.Cloud.Common.AzureStorage.dll
通过ildasm / Tp Microsoft.Cloud.Common.Diagnostics.dll从位于服务总线文件夹中的另一个Microsoft.Cloud . *程序集中提取公钥和公钥令牌
在文本编辑器中打开azurestorage.il,并将公钥令牌和公钥更改为上一步中提取的公钥和公钥
重新组装了il文件:ilasm / dll azurestorage.il /out=Microsoft.Cloud.Common.AzureStorage.dll
使用以下命令注册程序集以进行签名验证:sn -Vr Microsoft.Cloud.Common.AzureStorage.dll
将生成的程序集安装到GAC:gacutil / i Microsoft.Cloud.Common.AzureStorage.dll
它终于奏效了 . 希望这可以帮助任何陷入这个问题的人 .
正如Jafin在this answer中给出的那样,幸运的是,Microsoft发布的10/23/2015正式解决了.NET 4.6的问题 .
在此下载:Update for Service Bus Server 1.1 (KB3086798)
据我了解你需要向Microsoft报告错误,我发现您需要向Microsoft报告错误 . 很高兴知道微软将会报告错误的用户 .
根据微软的回答,你可以在这里报告Microsfot错误:https://connect.microsoft.com/
注意:您必须拥有一个微软帐户,您可以在 hotmail.com
我知道有些微软产品不像outlook.com
首先去https://connect.microsoft.com/:
一步一步
i.stack.imgur.com/CewDL.png
步骤1:在程序中编写您想要报告的错误,然后单击加入 .
i.stack.imgur.com/pJbQY.png
第2步:单击继续 .
i.stack.imgur.com/cCgXq.png
第3步:制作您的 Profiles .
i.stack.imgur.com/PVqXi.png
第4步:点击反馈 .
i.stack.imgur.com/nL5Kr.png
第5步:在页面末尾的文本框中写下错误 Headers .
i.stack.imgur.com/gEOJG.png
第6步:然后点击 submit feedback
i.stack.imgur.com/MQgV0.png
第7步:现在您可以编写问题并告诉Microsoft有关此错误的信息 .