`
pcajax
  • 浏览: 2174134 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

企业类库问题 public key 问题[经过自己测试]

阅读更多
Enterprise Library Configuration是Enterprise Library附带的编辑App.Config的工具,安装Enterprise Library就会编译生成。使用这个工具编辑App.config时非常方便,但是也遇到一些使用上的问题。记录下来,以备后查。

问题起因:在调试的过程中,希望能够跟踪到Enterprise Library的内部,所以将Enterprise Library的Blocks中的代码加入到了自己的项目中,并在项目中引用这些组件。

问题描述:使用VSTS的插件Enterprise Library Configuration编辑并保存项目的App.config。在编译时选择全部重新编译,顺利通过(中间也遇到些小麻烦,不过不是本文档的重点讨论范畴)。运行时,一旦调用到Enterprise Library的组件,便会报以下错误提示:

未能加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项,找到程序集清单定义与程序集不匹配。(异常来自……)

问题分析:

1、 看到PublicKeyToken,就猜测是因为强命名的关系,即清单与引用的程序集强命名不匹配(准确的说是公钥和私钥不匹配)。

2、 不匹配的原因:微软发布的程序集是包含强命的(即“……\Enterprise Library 4\ Bin”中的*.dll)。而本机编译得到的程序集是不包含强命名的(即“……Enterprise Library 4\EntLib4SCR\Bin”中的*.dll)

3、 VSTS 中嵌入的Enterprise Library Configuration是微软发布的,所以用它来编辑App.Config就会在配置文件中引入强命名,而项目引用的是本机编译得到的程序集,自然不匹配。

解决办法:

1、 使用VSTS中嵌入的Enterprise Library Configuration(“……\Enterprise Library 4\ Bin”)编辑配置文件,但引用的程序集一定得是微软发布的(“……\Enterprise Library 4\ Bin”)。

2、 使用本机编译得到的Enterprise Library Configuration(“……Enterprise Library 4\EntLib4SCR\Bin”)来编辑配置文件,引用的程序集就可以是本机编译得到的(“……Enterprise Library 4\EntLib4SCR\Bin”)。

其实道理很简单,就是必须得用配套的东西,要么用微软发布的,要么用本机编译的。

后记:

1、 本来是想可以使用Enterprise Library的同时还可以编辑其中的代码,没想到弄巧成拙。版本控制在微软这样的企业必定是非常严格的,所以如果你想修改Enterprise Library版本,合理的做法是也给Enterprise Library的每个项目都加上强命名(巨大的工作)。

2、 为了表述清楚,上文中的本地编译得到的程序集(“……Enterprise Library 4\EntLib4SCR\Bin”)实际上是在安装Enterprise Library时得到的,如果你希望使用的是已经经过你修改的程序集,应该使用“……Enterprise Library 4\EntLib4SCR\Block\Configuration\Src\Console\bin\Debug”下的Enterprise Library Configuration来编辑你的配置文件,才能确保正确。

3、 网上大部分说法是去掉配置文件中的“PublicKeyToken=31bf3856ad364e35”,我觉得这样做不是很合理,虽然能够使用,但是显然损失了很多可控性。原理是因为本机默认编译出的程序集本身就是“PublicKeyToken=null”,所以能够通过。

终于有点明白了,本人才疏学浅,这么简单的问题搞了这么久,不过欣慰的是总算有点收获。还有一点没有搞明白的是:VSTS中的插件路径在什么地方保存,要是知道直接改到本地编译后的路径就好了。我在本地文件和注册表中都没有找到(注册表中有这个路径,不过改了之后没有效果)。希望路过的高手能告诉一声,先谢了
分享到:
评论

相关推荐

    C++调用C#类库demo

    要让C++能够访问C#的类库,C#类库中的方法必须是`public`的,并且如果涉及到实例方法,类需要标记为`public sealed`(不可继承),以确保COM兼容性。此外,类库需要设置为`AllowPartiallyTrustedCallers`属性,因为...

    php版本支付宝支付类库.zip

    2. **配置管理**:在使用该类库时,开发者需要配置自己的商户ID(partner)、商户私钥(private_key)、支付宝公钥(public_key)等信息,这些参数通常在支付宝商户后台获取,用于验证和加密交易数据。 3. **请求...

    文件缓存的php类库.zip

     public function __construct($key, $root = "/cachelayer"){  $this->root = $_SERVER["DOCUMENT_ROOT"].$root;  $this->key = $key;  }  public function expired($life_span){  $this->...

    c#多年积累的类库

    7. **设计模式(Design Patterns)**:类库往往遵循常见的设计模式,如单例模式、工厂模式、观察者模式等,这些模式是解决特定问题的最佳实践,提高了代码的可读性和可维护性。 8. **枚举(Enum)和常量(Constants...

    RSA加密解密类库及代码示例

    public_key = private_key.public_key() # 加密 message = b'This is a secret message' ciphertext = public_key.encrypt( message, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=...

    C#程序集类库的开发及调用.zip

    在.NET框架中,C#程序集是承载代码的单元,相当于...通过实践这些步骤,开发者可以有效地构建自己的类库,提高代码复用性和项目的模块化程度。在实际开发中,理解并熟练运用这些知识将有助于提升软件开发的效率和质量。

    Java 常见类库的介绍

    Java 类库是Java编程语言的核心组成部分,它包含了大量的预定义类和接口,这些类和接口提供了丰富的功能,方便开发者进行日常开发。Java类库主要分为若干个包,如`java.lang`、`java.util`、`java.io`等,每个包都有...

    c# rest http请求类库

    request.AddParameter("key", "value"); ``` 3. **请求头管理**:设置请求头非常直观,例如添加自定义的`User-Agent`或`Authorization`。 ```csharp request.AddHeader("Content-Type", "application/json"); ``` ...

    C#类库设计.rar

    - 对类库进行详尽的单元测试,确保其功能正确无误,同时也有助于发现潜在的设计问题。 9. **文档和注释** - 提供清晰的API文档,描述类库的功能、使用方法及注意事项。类库内部应使用XML注释,便于生成文档和IDE...

    Java的PList类库 Blister_java_plist_

    - 开源社区通常会提供讨论论坛、问题追踪系统等资源,用户可以在这些平台上寻求帮助或贡献自己的改进。 总之,Blister Java PList类库是Java开发人员处理PList文件的强大工具,它简化了读写流程,提高了开发效率,...

    wx加密解密js类库

    encrypt_rsa = RSA.KEYUTIL.getKey(publicKey); encStr = encrypt_rsa.encrypt(input_rsa) encStr = RSA.hex2b64(encStr); console.log("加密结果:" + encStr) 解密: var decrypt_rsa = new RSA.RSAKey(); ...

    C# 对注册表进行操作的类库

    public bool SetRegVal(string keyPath, string keyName, string keyValue) { try { using (RegistryKey key = _rootkey.CreateSubKey(keyPath)) { key.SetValue(keyName, keyValue); return true; } } ...

    不错的C#加密程序,可以自由添加key

    C#中加密主要基于.NET框架提供的System.Security.Cryptography命名空间,该命名空间包含了多种加密算法的类库。常见的加密算法有AES(高级加密标准)、DES(数据加密标准)、RSA(公钥加密算法)和SHA(安全散列算法...

    PHP文件缓存类库.zip

     public function cacheData($key, $value = '', $cacheTime = 0) {  $filename = $this->_dir . $key . self::EXT;  if($value !== '') { // 将value值写入缓存  if(is_null($value)) ...

    【ASP.NET编程知识】ASP.NET在底层类库中获取Session C#类中获取Session .docx

    本文将深入探讨如何在底层类库和C#代码中获取和管理Session。 首先,要获取Session,你需要确保在你的项目中已经引用了System.Web命名空间,因为Session对象是该命名空间中的成员。在C#代码中,你可以通过以下方式...

    c #的类库 .rar

    C# 类库是.NET框架的核心组成部分,它提供了一系列预先定义的类、接口和方法,用于构建高效、可维护的C#应用程序。C#类库涵盖了各种功能,包括数据访问、网络通信、图形绘制、文件I/O操作等。下面将详细探讨C#类库的...

    js类库rsa相关

    encrypt.setPublicKey('your_public_key_here'); var encrypted = encrypt.encrypt('plaintext'); ``` 服务器端则使用私钥解密`encrypted`字符串。 4. **PHP对接**: 在服务器端,可以使用PHP的`openssl`扩展...

    防SQL注入的php类库.zip

     foreach($_COOKIE as $key=>$value){$this->stopattack($key,$value,$this->cookiefilter);}  }  public function stopattack($StrFiltKey, $StrFiltValue, $ArrFiltReq){  if(is_array($StrFiltValue...

    Java的实用工具类库util包详细讲解

    (2) public Object get(Object key):返回哈希表中指定键对应的值。 Java.util 包提供了一些非常实用的工具类,帮助开发者更方便地处理日期、时间、随机数、堆栈、向量、位集合和哈希表等数据结构。

    C#知识类库c#c#

    C#开发者可以利用.NET框架中的System.Collections.Generic命名空间进行数据结构操作,如List和Dictionary<TKey, TValue>等。System.IO命名空间则提供了文件和流的操作功能,例如File类和StreamReader/StreamWriter类...

Global site tag (gtag.js) - Google Analytics