我把一个大的VSC项目分解成几个小的项目,虽然当它都是一个项目的时候一切都很好,但现在我把它分解成了一个错误。当我尝试强制转换时会抛出一个异常,尽管我没有更改任何代码。例外情况如下:
无效例外
[A] MyApplication.MyProject.MyNamespace.Class不能强制转换为[B]MyApplication.MyProject.MyNamespace.Class。类型A源自“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\rc\78e25ad5\28e4b7d\assembly\dl3\877f6451\b808fef4\u 4e19cb01\MyProgram.DLL”上下文“Default”中的“MyProgram,Version=2.4.0.46,Culture=neutral,PublicKeyToken=null”。类型B源自“C:\Source\view\Application\Version\core\bin\MyProgram.dll”处上下文“LoadFrom”中的“MyProgram,Version=2.4.0.46,Culture=neutral,PublicKeyToken=null”。
私有静态extern int HelperGetPage(uint pClient、String sPage、StringBuilder sBuff、int nBuffSize);
此外部程序具有正确的dll路径:“C:\Source\view\Application\Version\core\bin\MyProgram.dll”。但是,VS正在将dll加载到它的临时文件中,并从那里运行它,您可以从上面异常中的路径看到这一点。这使得它在两个相同的DLL中查找,这导致了错误。我看到的反应是
Reflection and casting
但我没有
或
Assembly.LoadFrom(“path.dll”)
装配
或
加载自
或者在解决方案中根本没有提到dll的位置。我所能想到的是,这是不知何故正在幕后进行的VS,我找不到任何地方,我可以改变它。任何帮助都将不胜感激。
错误的调用堆栈:
RedCarpetCore.dll!RedCarpet.Core.EpsInProcess.EpsConnector.ChangeLogLevel(string[] args = {string[3]}) Line 3727 + 0x1d bytes
DotNetBridge.DLL!<Module>.RunMethodInProcess(sbyte* szAssembly = 0x035b7db4, sbyte* szFullyQualifiedName = 0x08ebfcf4, sbyte* szClientPtr = 0x0bccd26c, int nArgs = 2, sbyte** arrArgs = 0x0263190c) + 0x43f bytes
[Native to Managed Transition]
DotNetScriptPlugin.dll!034d9e5f()
ntdll.dll!7c827a29()
kernel32.dll!77e6570a()
MSVCR71.DLL!7c352d9b()
MSVCR71.DLL!7c3531c5()
MSVCR71.DLL!7c352e69()
MSVCR71.DLL!7c36a582()
MSVCR71.DLL!7c34f9a2()
MSVCR71.DLL!7c34f9a2()
MSVCR71.DLL!7c350135()
MSVCR71.DLL!7c36a582()
eprise.dll!01d15fa7()
eprevent.dll!01e218f0()
eprevent.dll!01e2ec73()
eprise.dll!01ccf427()
wcc200.dll!01c0a6c5()
oleaut32.dll!77d04141()
[Managed to Native Transition]
RedCarpetCore.DLL!RedCarpet.Core.EpsInProcess.EpsClient.GetPage(string s = "/sysinfo") Line 318 + 0x1a bytes
你会注意到动态链接库在混乱中的某个地方被切换。开头用大写字母的dll在临时文件中,结尾用小写字母的dll在bin中。