5 .net c# dependencies assemblies
我有一个应用程序(让我们称之为 MyApp),它动态地为一个类创建源代码,然后编译它。当它编译源代码时,我还引用了另一个文件夹中已经存在的另一个 DLL(即这个新创建的类的基类)。我执行以下操作来编译和输出 DLL:
//Create a C# code provider
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
//Set the complier parameters
CompilerParameters cp = new CompilerParameters();
cp.GenerateExecutable = false;
cp.GenerateInMemory = false;
cp.TreatWarningsAsErrors = false;
cp.WarningLevel = 3;
cp.OutputAssembly = "SomeOutputPathForDLL";
// Include referenced assemblies
cp.ReferencedAssemblies.Add("mscorlib.dll");
cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("System.Core.dll");
cp.ReferencedAssemblies.Add("System.Data.dll");
cp.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
cp.ReferencedAssemblies.Add("System.Xml.dll");
cp.ReferencedAssemblies.Add("System.Xml.Linq.dll");
cp.ReferencedAssemblies.Add("MyApp.exe");
cp.ReferencedAssemblies.Add("SomeFolder\SomeAdditionalReferencedDLL.dll");
// Set the compiler options
cp.CompilerOptions = "/target:library /optimize";
CompilerResults cr = provider.CompileAssemblyFromFile(cp, "PathToSourceCodeFile");
Run Code Online (Sandbox Code Playgroud)
稍后在我的应用程序中(或下次运行应用程序时),我尝试创建该类的实例。我知道新创建的类(我们称之为 Blah)的 DLL 和基类的 DLL 在哪里。我使用以下代码尝试创建新类的实例:
Assembly assembly = Assembly.LoadFile("PathToNewClassDLL");
Blah newBlah = assembly.CreateInstance("MyApp.BlahNamespace.Blah") as Blah;
Run Code Online (Sandbox Code Playgroud)
当我像上面那样调用 Assembly.CreateInstance 时,我收到一条错误消息,说它无法创建实例。当我检查 assembly.GetReferencedAssemblies() 它有标准引用和我的应用程序的引用 (MyApp.exe) 但它没有我最初编译类时使用的依赖基类的引用 (SomeAdditionalReferencedDLL.dll) .
我知道我必须以某种方式添加基类引用才能创建实例,但我不确定如何执行此操作。当我拥有程序集及其所有依赖项时,如何从程序集创建类的实例?
谢谢
您确定在编译时,它引用了您认为它正在引用的 DLL 实例吗?它可能会解析到您认为的其他地方的路径,以便在实例化您的类时,它不再找到该 DLL。我建议获取编译过程和类型创建的 Fusion 日志,以了解类型是如何解析的。
| 归档时间: |
|
| 查看次数: |
9726 次 |
| 最近记录: |