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"}
我使用 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"}