CodeDom参考ActiveX资源

时间:2017-10-03 16:48:15

标签: c# com activex codedom

非常相似的未回答的问题:CodeDom Reference VB6 dll

关于使用CodeDom(Visual Basic Provider)编译的内存中程序集引用ActiveX / COM程序集的问题,我最近几天一直在搜索谷歌。

我会尽力解释我正在尝试做的事情,如果技术术语已经关闭,请提前抱歉!

Visual Studio流程 - 工作!

  1. 打开Visual Studio。
  2. 创建新的Windows窗体项目(C#)。
  3. 右键点击参考 - >添加参考...
  4. 选择我想要的可执行文件(可执行文件在这里可能很重要吗?)
  5. 该操作会生成两个引用。
  6. 我们可以随心所欲地使用这些课程,方法等。
  7. CodeDom - 无效!

    采取前工作步骤!

    1. 在可执行文件上使用TibImp.exe生成两个.dll文件(Interop)。
    2. 将生成的.dll文件移动到可访问的位置(桌面!)
    3. 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搜索)

      • 确保平台全面设置(本例中为x86)。
      • 使用TibImp.exe创建Interop DLL。
      • 尝试使用CompilerParameters.EmbeddedResources引用(但不明白)
      • 尝试引用CompilerParameters.LinkedResources(但不明白)

      可能的解决方法(未经测试 - 不首选)

      作为一种解决方法,我想过可能让CodeDom引用的代码片段在其末端动态加载程序集。但是,如果Visual Studio可以引用COM / ActiveX对象并使用它,我想让CodeDom做同样的事情。

0 个答案:

没有答案