CAKE:不安全地加载程序集

CAKE: Unsafely load assembly

我使用 CAKE 0.21.1.0.

我想添加一个执行与此 PowerShell 操作等效的任务:

$dlls = @(${dll1}, ${dll2})
$dlls | % { [Reflection.Assembly]::UnsafeLoadFrom($_) }
[StaticClassFromLocalLibrary]::SomeStaticMethod(SomeArgument)

我决定不使用 the CAKE PowerShell add-in,因为 运行直接使用 PowerShell 脚本会引发错误 <script>.ps1 is not digitally signed. The script will not execute on the system。由于我雇主的 IT 政策,我不能 运行 Set-ExecutionPolicy 来规避这个问题。这就是为什么我想将 PowerShell 脚本中的步骤直接翻译成 CAKE 中的指令。

最初,我在我的 CAKE 脚本中写了这些行:

System.Reflection.Assembly.UnsafeLoadFrom(dll1);
System.Reflection.Assembly.UnsafeLoadFrom(dll2);
StaticClassFromLocalLibrary.SomeStaticMethod(SomeArgument);  

但是抛出异常,表示在当前上下文中找不到名字StaticClassFromLocalLibrary

然后我将这一行添加到我的 CAKE 脚本中:

#r @"\hostName\Folder1\Folder2\Folder3\Folder4\Some.Local.Project.dll"

但是因为没有以不安全的方式加载,又抛出一个异常,这次提示我无法加载DLL。

如何使用 #r 指令(或任何其他 CAKE 命令)来指定我希望以不安全的方式加载 DLL?

编辑:

我已经通过咨询 this page 并采纳了已接受答案中的建议解决了我的问题。

Cake 中没有构建不安全加载,但因为它只是 C#,您可以做的只是将 PowerShell 代码段转换为 C#

var assembly = System.Reflection.Assembly.UnsafeLoadFrom("./tools/Addins/Newtonsoft.Json/lib/net45/Newtonsoft.Json.dll");

var type = assembly.GetType("Newtonsoft.Json.JsonConvert");

var method = type.GetMethod("SerializeObject", new [] {typeof(object) });

var SerializeObject = (Func<object, string>) Delegate.CreateDelegate(
                                           typeof(Func<object, string>), null, method);

var json = SerializeObject(new { Hello = "World"});

Information("{0}", json);

这将输出类似

的内容
{"Hello":"World"}