Nie jestem do końca pewien, co z tym zrobić. Ogólnym celem jest możliwość pobrania skryptu użytkownika i wykonania go w środowisku .NET. Mam większość napisanego kodu i rzeczy działają pod warunkiem, że nie próbuję załadować własnych zespołów. Jednak, aby bezpiecznie zapewnić użytkownikom dostęp do wewnętrznych części systemu, utworzono bibliotekę DLL proxy. Tutaj pojawia się problem.Ładowanie niestandardowych złożeń za pomocą CompileAssemblyFromSource
W tej chwili ta biblioteka DLL proxy ma jedną rzecz, interfejs.
CompilerParameters options = new CompilerParameters();
options.GenerateExecutable = false;
options.GenerateInMemory = true;
options.ReferencedAssemblies.Add("System.dll");
options.ReferencedAssemblies.Add("ScriptProxy.dll");
Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider();
CompilerResults result = provider.CompileAssemblyFromSource(options, script);
// This line here throws the error:
return result.CompiledAssembly;
Running powyższy kod, to rzuca się następujący błąd:
System.IO.FileNotFoundException : Could not load file or assembly 'file:///C:\Users...\AppData\Local\Temp\scts5w5o.dll' or one of its dependencies. The system cannot find the file specified.
Oczywiście moja pierwsza myśl to: "... a co scts5w5o.dll?"
Czy to nie jest ładowanie ScriptProxy.dll
, czy też ScriptProxy.dll próbuje załadować zależności, które są gdzieś w pliku tymczasowym? Czy jest to coś zupełnie innego?
Powinienem wspomnieć, że wykonuję ten kod od biegacza testowego NUnit. Nie jestem pewien, czy to coś zmieni.
To miałoby sens. Wypróbuję to teraz. –
Zamierzam oznaczyć to jako odpowiedź, ponieważ chociaż nie rozwiązało problemu za każdym razem, pomogło mi uzyskać prawdziwy komunikat o błędzie, który jest prawie tak samo pomocny! –
Jak rozwiązać rzeczywisty problem !! – Moumit