如何从执行程序集引用库?
How to reference a library from execution assembly?
我有一个应用程序引用比方说:DLL 1 和 DLL 2。
在应用程序中,最终用户可以为某些自定义功能编写一些代码。
在我的应用程序中,我使用以下代码编译他的代码:
// User's code
string code = @" ** User's code ** ";
// Create the provider
CSharpCodeProvider provider = new CSharpCodeProvider();
// Create the parameters
CompilerParameters parameters = new CompilerParameters();
// Compile the user's code
CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
在编译之前,我想添加一些已经在我的应用程序中使用的引用,它们是 DLL 1 和 DLL 2(为了让用户使用我的一些功能)。
我尝试使用 GetExecutingAssembly,但它 returns 是主要的应用程序程序集,我找不到如何获取 DLL 1 和 DLL 2。
Assembly.GetExecutingAssembly
我不知道 DLL 的路径,所以以下指令不起作用:
parameters.ReferencedAssemblies.Add("C:\DLL1.dll");
请问有人知道怎么解决吗?
您可以从该程序集中定义的类型中获取程序集位置。因此,在您的 CompilerParameters 中,您可以像这样引用它们:
new CompilerParameters
{
ReferencedAssemblies =
{
typeof(MyDll1.Type1).Assembly.Location,
typeof(MyDll2.Type2).Assembly.Location
//, etc
}
//, etc
}
我有一个应用程序引用比方说:DLL 1 和 DLL 2。
在应用程序中,最终用户可以为某些自定义功能编写一些代码。
在我的应用程序中,我使用以下代码编译他的代码:
// User's code
string code = @" ** User's code ** ";
// Create the provider
CSharpCodeProvider provider = new CSharpCodeProvider();
// Create the parameters
CompilerParameters parameters = new CompilerParameters();
// Compile the user's code
CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
在编译之前,我想添加一些已经在我的应用程序中使用的引用,它们是 DLL 1 和 DLL 2(为了让用户使用我的一些功能)。
我尝试使用 GetExecutingAssembly,但它 returns 是主要的应用程序程序集,我找不到如何获取 DLL 1 和 DLL 2。
Assembly.GetExecutingAssembly
我不知道 DLL 的路径,所以以下指令不起作用:
parameters.ReferencedAssemblies.Add("C:\DLL1.dll");
请问有人知道怎么解决吗?
您可以从该程序集中定义的类型中获取程序集位置。因此,在您的 CompilerParameters 中,您可以像这样引用它们:
new CompilerParameters
{
ReferencedAssemblies =
{
typeof(MyDll1.Type1).Assembly.Location,
typeof(MyDll2.Type2).Assembly.Location
//, etc
}
//, etc
}