我有一个winforms .net4.5.2应用程序,它依赖于通过引用包含在VS项目中的C++ \ cli包装器。当使用任何CPU构建的winforms应用程序启动时,使用程序集解析器指出应用程序文件夹根目录中的平台特定文件夹中的引用和Assembly.Load(ed)的正确平台dll,例如\ x64或\ x86。带遗留应用程序的Visual Studio C++ 2015运行时部署
此C++ \ cli现在使用v140平台工具集建立,该工具集依赖于Universal CRT dll:s。在这里寻找https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/我能找到必要的dll:s(41 * 2),并且我按照要求将它们复制到\ x86和\ x64文件夹中。现在,因为该变化V140平台我的应用程序不会再启动和的ProcessMonitor文件操作告诉我下面的:
SUCCESS C:\MyApp\x64\TheCLIWrapper.x64.dll
SUCCESS C:\MyApp\x64\ADependency.dll
SUCCESS C:\MyApp\x64\msvcp140.dll
SUCCESS C:\MyApp\x64\vcruntime140.dll
SUCCESS C:\MyApp\x64\api-ms-win-crt-runtime-l1-1-0.dll
NAME NOT FOUND C:\MyApp\ucrtbase.dll
如何是这甚至可能的,如果在装配之前解决我的C++ \ CLI包装我明确设置DLL目录(使用SetDllDirectory)到C:\ MyApp \ x64文件夹?通过这个我的意思是为什么加载过程看在C:\ MyApp的ucrtbase.dll?当然,如果特定平台的所有41个dll都被复制到根C:\ MyApp \文件夹中,但它对我来说不是一个选项,也不是在运行该C++运行时的客户端上安装C++运行时可执行文件应用。
有没有人有关于如何解决这个部署问题的想法或任何提示?
因为我预料到无人问津回答有关在传统产品的部署(可能是因为唯一的解决办法就是安装问题在我看来,在许多不同的行业中,实际上不适用的运行时)我写了我写过的用于解决这个问题的最愚蠢的代码。在解析程序集之前,将复制到所有41 dll:s的当前运行平台的根文件夹中。这只是让我生气,所以很抱歉咆哮:/但至少我有一个解决方案:) – tompish
也患有这种情况。我不认为我可以接受这样的解决方案! :p – dten
哦,想我明白了:) – dten