非常相似的未回答的问题:CodeDom Reference VB6 dll
关于使用CodeDom(Visual Basic Provider)编译的内存中程序集引用ActiveX / COM程序集的问题,我最近几天一直在搜索谷歌。
我会尽力解释我正在尝试做的事情,如果技术术语已经关闭,请提前抱歉!
Visual Studio流程 - 工作!
CodeDom - 无效!
采取前工作步骤!
CodeDom代码示例
string sCodeLocation = @"C:\Interop\Code.vb";
string[] sCodeContents = { File.ReadAllText(sCodeLocation) };
List<string> ReferenceList = new List<string>();
ReferenceList.Add("System.dll");
ReferenceList.Add(@"C:\Users\xxxxx\Desktop\Interops\CustomActiveX.dll");
string[] References = ReferenceList.ToArray();
CompilerParameters CompilerParams = new CompilerParameters();
CompilerParams.GenerateInMemory = true;
CompilerParams.TreatWarningsAsErrors = false;
CompilerParams.CompilerOptions = "/optimize /platform:x86";
CompilerParams.ReferencedAssemblies.AddRange(References);
VBCodeProvider Provider = new VBCodeProvider();
CompilerResults CompileResult = Provider.CompileAssemblyFromSource(CompilerParams, sCodeContents);
我收到的例外 System.IO.FileNotFoundException:'无法加载文件或程序集'CustomActiveX,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一。系统找不到指定的文件。'
尝试解决方案列表(基于Google搜索)
可能的解决方法(未经测试 - 不首选)
作为一种解决方法,我想过可能让CodeDom引用的代码片段在其末端动态加载程序集。但是,如果Visual Studio可以引用COM / ActiveX对象并使用它,我想让CodeDom做同样的事情。