最近我们决定将网站从1.1升级到2.0。我们使用Visual Studio 2010进行升级,升级工作正常。
该网站使用的是Enterprise Library 2005,我们一直在努力工作。由于API的主要区别,我们不希望升级Enterprise Library 2006。
我们为使企业库工作而做的第一件事是我们将其添加到\ Framework \ v2.0.50727 \ Machine.Config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<configSections>
<section name="enterpriselibrary.configurationSettings" type="System.Configuration.IgnoreSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<enterpriselibrary.configurationSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" applicationName="X" xmlns="http://www.microsoft.com/practices/enterpriselibrary/08-31-2004/configuration">
<configurationSections>
<configurationSection xsi:type="ReadOnlyConfigurationSectionData" name="dataConfiguration" encrypt="false">
<storageProvider xsi:type="RegistryStorageProviderData" name="Registry Storage Provider" registryRoot="LocalMachine" registrySubKey="SOFTWARE\X" />
<dataTransformer xsi:type="XmlSerializerTransformerData" name="Xml Serializer Transformer">
<includeTypes />
</dataTransformer>
</configurationSection>
<configurationSection xsi:type="ReadOnlyConfigurationSectionData" name="securityCryptographyConfiguration" encrypt="false">
<storageProvider xsi:type="RegistryStorageProviderData" name="Registry Storage Provider" registryRoot="LocalMachine" registrySubKey="SOFTWARE\X" />
<dataTransformer xsi:type="XmlSerializerTransformerData" name="Xml Serializer Transformer">
<includeTypes />
</dataTransformer>
</configurationSection>
</configurationSections>
<keyAlgorithmStorageProvider xsi:nil="true" />
<includeTypes />
</enterpriselibrary.configurationSettings>
</configuration>
但每次我调用此函数
Cryptographer.CompareHash( "X", X, X )
我收到此错误
System.InvalidCastException was unhandled
Message=Specified cast is not valid.
Source=Microsoft.Practices.EnterpriseLibrary.Configuration
StackTrace:
at Microsoft.Practices.EnterpriseLibrary.Configuration.Storage.ConfigurationChangedRegistryWatcher.Poller()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
当我尝试调用此函数时,我也收到同样的错误
DBCommandWrapper l_sqlWrapper = _db.GetStoredProcCommandWrapper("x");
l_sqlWrapper.AddInParameter("@x", DbType.Int32, "X");
我想补充一点,这在1.1中工作得很好,而且我已经检查过,我传入的所有值都不是null并且具有合法价值。 有人会有线索的原因吗?
答案 0 :(得分:1)
.NET 2.0明确不支持Entlib 1.1。实际上,它根本不受支持,但这是一个不同的问题。
.NET 1.1和.NET 2.0之间存在很多差异。其中一个变化很大的是配置系统。
我很幸运在VS 2005中编译了entlib 1.1以获得2.0目标版本,但那是很久以前的事了,我只进行了简短的测试。
基本上,这里的规范答案是“切换到entlib 2”。是的,改变很多,但1.1的东西不再起作用了。
答案 1 :(得分:0)
问题已修复。
我们通过下载企业库并将其转换为.Net 2.0下的VS2010来解决该问题。然后我们在#define VS2003上找到/替换为#define VS2005B2。
然后我们添加了对项目的引用,一切正常。