在Windows 10上运行时编译vb.net时获得BC31019的优异性

时间:2015-12-09 09:08:19

标签: vb.net compiler-errors windows-10 runtime-compilation

我们非常动态地生成大量文档。因此,我们连接源代码并在运行时构建一个DLL。这是从Windows XP开始运行的。 现在我们正在测试windows 10,它无法使用错误编译此dll" BC31019:无法写入输出文件' C:\ Users [name] AppData \ Local \ Temp \ xyz.dll&# 39;:指定的图像文件不包含资源部分"

出于测试目的,我们删除所有生成的源代码,并将其替换为只有一个函数的基本类(抛出指定文本的异常)并且没有引用的程序集。 这也在除了Windows 10之外的所有机器上运行。相同的错误。

谁能猜到为什么?

这是基本方法

Public Sub Compile()

   Dim lSourceCode = "Namespace DynamicOutput" & vbCrLf &
                              "   Public Class Template" & vbCrLf &
                              "      Sub New()" & vbCrLf &
                              "      End Sub" & vbCrLf &
                              "      Public Sub Generate(ByVal spoolJob As Object, ByVal print As Object)" & vbCrLf &
                              "         Throw New System.Exception(""Generate reached"")" & vbCrLf &
                              "      End Sub" & vbCrLf &
                              "" & vbCrLf &
                              "   End Class" & vbCrLf &
                              "End Namespace"

   Dim lParams As CodeDom.Compiler.CompilerParameters = New CodeDom.Compiler.CompilerParameters
   lParams.CompilerOptions = "/target:library /rootnamespace:CompanyName /d:TRACE=TRUE /optimize "
   lParams.IncludeDebugInformation = True
   lParams.GenerateExecutable = False
   lParams.TreatWarningsAsErrors = False
   lParams.GenerateInMemory = True

   Dim lProviderOptions As New Dictionary(Of String, String) From {{"CompilerVersion", "v4.0"}}

   Dim lResult As CodeDom.Compiler.CompilerResults = Nothing

   Using provider As New VBCodeProvider(lProviderOptions)
      lResult = provider.CompileAssemblyFromSource(lParams, lSourceCode)
   End Using

   ' ... check for errors

   Dim lInstance As Object = lResult.CompiledAssembly.CreateInstance("CompanyName.DynamicOutput.Template")
   lInstance.GetType.GetMethod("Generate").Invoke(lInstance, New Object() {Me.SpoolJob, Me.Print})

End Sub

0 个答案:

没有答案