c# - 如何从执行程序集中引用库?
问题描述
我有一个应用程序引用让我们说: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,但它返回主应用程序程序集,我找不到如何获取 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
}
推荐阅读
- python - 在 Python 的元组中访问字典中的项目
- azure - 为什么没有为已删除的容器记录 Azure 门户活动日志事件?
- python - 为什么我调试程序时 PyCharm 的断点突然变灰了?
- css - SVG:旋转整个文本
- excel - Microsoft Excel 如何检测 .xls 或 .xlsx 文件的编码?
- mysql - MySQL ERROR 1071 (42000): 指定的键太长;最大密钥长度为 1000 字节
- python - 如何在列中填充空值?
- git - 我如何确定我只删除了 Git 中的本地分支?
- javascript - 在 Redux-React 应用程序中排序时出错
- apache-spark - spark等待并且不安排任务运行的可能原因?