DevExpress源码编译报错解决办法

下载了15.2.4的源码,尝试自己编译dll,

Data编译得好好的,然后下一个Printing.Core就出问题了,报错显示无法访问某些变量,查了一下在Data里面是internal的属性,因此在printing.core的程序集里面当然不能访问

那别人是怎么编译通过的?网上查了好久都没有结果


怀疑c#是不是有些方法能让别的程序集访问自己的internal成员的方法,往这个方向搜了一下,终於给我找到原来有样东西叫
InternalsVisibleTo啊~!!


进而进一步了解了友元程序集之后(参考https://msdn.microsoft.com/zh-cn/library/0tke9fxk(VS.80).aspx),终於有了解决方法

1. 在DevExpress.Key下面建立签名文件并提取PublicKey

  • sn -k StrongKey.snk // 生成强名称密钥

  • sn -p StrongKey.snk key.publickey // 将公钥从 key.snk 提取到 key.publickey 中

  • sn -tp key.publickey // 显示存储在文件 key.publickey 中的公钥

成功的话会看到以下显示



Microsoft (R) .NET Framework Strong Name Utility  Version 4.0.30319.33440
Copyright (c) Microsoft Corporation.  All rights reserved.


Public key (hash algorithm: sha1):
0024000004800000940000000602000000240000525341310004000001000100bf81bb9ec3d16c
641309142735998f2e414c794732890bf84b255ba1d7b4b8fd31bd7d8edc6c7f23b907e1c42bf0
5d13875fc219f6f1a3a572a602cdef30c44a1690db3851102cc50ca73dcc5f902e329345a25386
b46c604a25bd5f5a7587a6e775caf3c726170ce32dc368ced998c3c192036bf35cb6bd9c5708ba
3a3ebccb


Public key token is 14bd271f49fa1e3c


注意你要复制的是长的public key而不是短的public key token


2. 在项目中打开AssemblyInfo.cs,找到以下内容

[assembly: InternalsVisibleTo(AssemblyInfo.SRAssemblyPrintingCore + ", PublicKey=00240000048......

将PublicKey后面的key字段复制成自己的public key即可,其他的publicKey也一并替换


3. 打开Printing.Core项目,重新编译生成,成功


小结:

写了这么多年的C#,今天才第一次知道友元程序集,但也借此机会见识到了使用DevExpress控件是个很好的学习机会


参考文献:

http://blog.csdn.net/jiangzhanchang/article/details/21228091


你可能感兴趣的:(DevExpress源码编译报错解决办法)