2017-10-03 10 views
0

Est-il possible d'autoriser les assemblys générés dynamiquement à accéder aux dépendances qui existent dans le projet qui génère le nouvel assemblage? Je travaille avec Unity et C#, et j'ajoute un assembly qui contient les dépendances qui existent dans le projet auquel il appartient maintenant, mais je reçois cette erreur: FileNotFoundException: Impossible de charger le fichier ou l'assembly 'ModAssembly000.dll' ou l'une de ses dépendances . Je reçois cette erreur parce que j'essaie de mettre 'using UnityEngine' en haut du script. Ceci est le code qui existe déjà dans le projet qui obtient le nouvel ensemble et invoque une méthode:Comment obtenir des assemblys générés lors de l'exécution pour utiliser les dépendances de projet? C#

 CompilerParameters parameters = new CompilerParameters(); 
    parameters.GenerateExecutable = false; 
    parameters.GenerateInMemory = true; 
    parameters.OutputAssembly = generatedName; 
    CompilerResults r = CodeDomProvider.CreateProvider("CSharp").CompileAssemblyFromFile(parameters, filePath); 
    r.CompiledAssembly.GetType("ModData").GetMethod("Run").Invoke(null, BindingFlags.Static, null, null, null); 

C'est la source pour l'assemblage créé dynamiquement:

using UnityEngine; 

public class ModData { 
    public static string modName = "Super kool mod"; 
    public static string modVersion = "1.2.1"; 

    public static void Run() { 
     Debug.Log("it worked :D"); 
    } 
} 

UnityEngine (donc, Debug. Log) existe dans le code qui génère cet assembly. Y a-t-il une manière que je peux obtenir le nouvel assembly créé pour utiliser l'UnityEngine qui existe dessus pour que je puisse permettre au nouveau code de faire n'importe quoi dans le projet au-dessus d'elle? Je sais que ModAssembly000.dll existe car si je supprime la ligne 'using UnityEngine', alors je peux accéder aux filds de chaînes statiques de l'assembly dynamique sans problème.

Répondre

0

Je pense que vous devez ajouter l'unité à la liste des ensembles référencés:

parameters.ReferencedAssemblies.Add("UnityEngine.dll"); 
+0

En effet, c'était. Je l'ai négligé. Merci pour votre temps! – TheNoobieWaffle