0

大量のドキュメントを非常に動的に生成しています。したがって、ソース コードを連結し、実行時に dll をビルドします。これは、Windows XP以降で実行されています。現在、Windows 10 のテストを行っていますが、この dll のコンパイルに失敗し、「BC31019: 出力ファイル 'C:\Users[name]AppData\Local\Temp\xyz.dll': The specified image file didリソース セクションを含まない"

テストの目的で、生成されたすべてのソース コードを削除し、1 つの関数 (指定されたテキストで例外をスローする) のみを持ち、参照アセンブリを持たない初歩的なクラスに置き換えます。これは、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
4

0 に答える 0