2017-12-24 5 views
0
Public Function GenerateScript(code As String) As IScript 
    Using provider As New VBCodeProvider() 
     Dim parameters As New CompilerParameters() 
     parameters.GenerateInMemory = True 
     parameters.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location) 
     Dim interfaceNamespace As String = GetType(IScript).Namespace 
     Dim codeArray() As String = New String() {"Imports " & interfaceNamespace & Environment.NewLine & code} 
     Dim results As CompilerResults = provider.CompileAssemblyFromSource(parameters, codeArray) 
     Return CType(results.CompiledAssembly.CreateInstance("Script"), IScript) 
    End Using 
End Function 

私は上記のコードを使用して、時間の経過と共に変化する可能性のある文字列を実行しています。しかし、私はこれを実行すると、私はこのエラーが表示されます:DLLのアクセスに問題があるCodeDomコンパイラ

System.IO.FileNotFoundException: 'Could not load file or assembly 'file:///C:\Users\zjf\AppData\Local\Temp\ykujgxkp.dll' or one of its dependencies. The system cannot find the file specified.' 

私はこれを修正する方法がわかりません。誰でも私を助けてくれますか?

ありがとうございます!

+0

'システムは指定されたファイルを見つけることができません。 ' - ファイルが存在しないことは明らかですか?それがある場合は、アプリケーションを管理者として実行し、問題が存在するかどうかを確認してください。 –

+0

adminで実行すると同じことが起こる – zjf

答えて

0

あなたはあなたのコードにこれを追加してみてください、あなたのアプリケーションにdllファイルを実装する必要がありセクション行方不明:

Public Function GenerateScript(code As String) As IScript 
    Using provider As New VBCodeProvider() 
     Dim parameters As New CompilerParameters() 
     parameters.GenerateInMemory = True 
     Parameters.EmbeddedResources.Add("C:\Users\zjf\AppData\Local\Temp\ykujgxkp.dll") 
     Parameters.ReferencedAssemblies.AddRange(New String() {"System.dll", "System.Drawing.dll", "System.Windows.Forms.dll", "System.Management.dll", "C:\Users\zjf\AppData\Local\Temp\ykujgxkp.dll"}) 
     Dim interfaceNamespace As String = GetType(IScript).Namespace 
     Dim codeArray() As String = New String() {"Imports " & interfaceNamespace & Environment.NewLine & code} 
     Dim results As CompilerResults = provider.CompileAssemblyFromSource(parameters, codeArray) 
     Return CType(results.CompiledAssembly.CreateInstance("Script"), IScript) 
    End Using 
End Function 
:だからあなたの最終的なコードは次のようなものでなければなりません

Parameters.EmbeddedResources.Add("C:\Users\zjf\AppData\Local\Temp\ykujgxkp.dll") 
Parameters.ReferencedAssemblies.AddRange(New String() {"System.dll", "System.Drawing.dll", "System.Windows.Forms.dll", "System.Management.dll", "C:\Users\zjf\AppData\Local\Temp\ykujgxkp.dll"}) 

+0

実際には、インポートしていないためではありません。コードを実行するたびに、dllの名前が変更されるため、インポートすることはできません。私はdllは一時的なdllだけで静的なものではないと思う。さらに、dllや類似のdllもtempフォルダには見つかりません。 – zjf

+0

誰でも回答がありますか? – zjf

関連する問題