Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从执行程序集中引用库?_C#_.net Assembly - Fatal编程技术网

C# 如何从执行程序集中引用库?

C# 如何从执行程序集中引用库?,c#,.net-assembly,C#,.net Assembly,我有一个应用程序引用,比如说:DLL 1和DLL 2 在应用程序中,最终用户可以为一些定制功能编写一些代码 在我的应用程序中,我使用以下方法编译他的代码: // User's code string code = @" ** User's code ** "; // Create the provider CSharpCodeProvider provider = new CSharpCodeProvider(); // Create the parameters CompilerParam

我有一个应用程序引用,比如说: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(以便让用户使用我的一些函数)

我尝试使用GetExecutionGassembly,但它返回主应用程序集,我找不到如何获取DLL 1和DLL 2

Assembly.GetExecutingAssembly
我不知道DLL的路径,因此以下指令不起作用:

parameters.ReferencedAssemblies.Add("C:\DLL1.dll");

有人知道如何解决这个问题吗?

您可以从该程序集中定义的类型获取程序集位置。因此,在编译器参数中,您可以这样引用它们:

new CompilerParameters
{
    ReferencedAssemblies =
    {
        typeof(MyDll1.Type1).Assembly.Location,
        typeof(MyDll2.Type2).Assembly.Location
        //, etc
    }
    //, etc
}

getExecutionGassembly().getReferenceAssembly()
然后过滤它。。。您还知道,这将是加载此程序集的“不同实例”吗?因此,如果您的函数(dll 2中的fx)正在修改程序中的某些内容,那么它显然将不起作用。您可以使用类似这样的内容从其名称
AppDomain.CurrentDomain.GetAssemblys().SingleOrDefault(assembly=>assembly.GetName().name==name)获取程序集