C# 在动态编译器中引用NuGet导入的程序集

C# 在动态编译器中引用NuGet导入的程序集,c#,assemblies,restsharp,csharpcodeprovider,C#,Assemblies,Restsharp,Csharpcodeprovider,我有一些C#代码,它接受用C#本身编写的脚本并动态执行脚本。我可以通过引用内置库的程序集来使用它们,如下所示 CSharpCodeProvider provider = new CSharpCodeProvider(); CompilerParameters cp = new CompilerParameters(); cp.ReferencedAssemblies.Add("System.Data.dll") cp.ReferencedAssemblies.Add("System.dll");

我有一些C#代码,它接受用C#本身编写的脚本并动态执行脚本。我可以通过引用内置库的程序集来使用它们,如下所示

CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("System.Data.dll")
cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("System.Xml.dll");
cp.ReferencedAssemblies.Add("System.Linq.dll");
cp.ReferencedAssemblies.Add("System.Xml.Linq.dll");
cp.ReferencedAssemblies.Add("System.Core.dll");
cp.ReferencedAssemblies.Add("System.Net.Http.dll");
...
options.GenerateExecutable = false;
options.GenerateInMemory = true;
CompilerResults results = provider.CompileAssemblyFromSource(options, "<SCRIPT-SOURCE-HERE>");
我将此添加到我试图编译的脚本中

using RestSharp;
但是,当尝试编译使用
RestSharp
库的脚本时,我收到一个错误

Metadata file 'RestSharp.dll' could not be found

引用
RestSharp
程序集的最佳方式是什么?

使用文件的完整路径。@HansPassant如何格式化路径?执行位置相关的
bin
目录在哪里
bin/assemblyname.dll
?我猜不出,您还没有说过要如何部署程序。如果操作正确,则它当前不在bin中,而是与.exe文件一起位于bin\Debug中。使用Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)来知道它存储在哪里,应该也适用于部署的副本。最终对我有效的是
options.referencedAssembly.Add(typeof(RestSharp.Http).Assembly.Location)。现在我必须指定一个类
Http
,这仅仅是因为需要一个类名而不是名称空间。我希望通过使用引入程序集路径的
Http
类名,而不仅仅是
Http
类。虽然这是好的,但它可以编译。请使用文件的完整路径。@HansPassant如何格式化路径?执行位置相关的
bin
目录在哪里
bin/assemblyname.dll
?我猜不出,您还没有说过要如何部署程序。如果操作正确,则它当前不在bin中,而是与.exe文件一起位于bin\Debug中。使用Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)来知道它存储在哪里,应该也适用于部署的副本。最终对我有效的是
options.referencedAssembly.Add(typeof(RestSharp.Http).Assembly.Location)。现在我必须指定一个类
Http
,这仅仅是因为需要一个类名而不是名称空间。我希望通过使用引入程序集路径的
Http
类名,而不仅仅是
Http
类。虽然这是好的,但它能编译。
Metadata file 'RestSharp.dll' could not be found