Я создаю программу IronPython, которая будет выполнять указанные * .dll из URL. Вот фрагмент:
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Net;
using IronPython.Runtime.Operations;
public class Program
{
[STAThread]
public static void my()
{
WebClient wc = new WebClient();
PythonOps.InitializeModuleEx(Assembly.Load(wc.DownloadData("https://data/from/url.dll")), "__main__", null, false, null);
}
public static void Main(string[] args)
{
Program.my();
}
}
Для этого используется функция: PythonOps.InitializeModuleEx
. Все работает нормально, только проблема в том, что он принимает аргументы от: Environment.GetCommandLineArgs
. Я посмотрел на часть этой функции в pythonops.cs и заметил, что если options == null
, то получится Environment.GetCommandLineArgs
, что мне не нужно. Ниже приведена ссылка на PythonOps.cs:
public static int InitializeModuleEx(Assembly/*!*/ precompiled, string/*!*/ main, string[] references, bool ignoreEnvVars, Dictionary<string, object> options) {
ContractUtils.RequiresNotNull(precompiled, nameof(precompiled));
ContractUtils.RequiresNotNull(main, nameof(main));
if(options == null) {
options = new Dictionary<string, object>();
}
options["Arguments"] = Environment.GetCommandLineArgs();
var pythonEngine = Python.CreateEngine(options);
var pythonContext = (PythonContext)HostingHelpers.GetLanguageContext(pythonEngine);
Мне нужна помощь, чтобы понять, как лучше всего решить эту проблему. Должен ли я просто создать пример с одним аргументом, чтобы эта функция не вызывалась? Если да, то как мне это сделать?
В общем, я просто хочу использовать жестко закодированные аргументы в коде, чтобы передавать их программе, а не читать их из командной строки.
ОБНОВЛЕНИЕ 2:
Спасибо за ответ, это мой исправленный код:
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Net;
using IronPython.Runtime.Operations;
public class Program
{
public static int InitializeModuleExDefault(
Assembly precompiled,
string main,
string[] references,
bool ignoreEnvVars)
{
IDictionary<string, object> options = new Dictionary<string, object>();
options.Add("Arguments", new Object {}); // replace with whatever object you want
}
public static int Main()
{
int InitializeModuleExDefault;
try
{
WebClient wc = new WebClient();
InitializeModuleExDefault = PythonOps.InitializeModuleEx(Assembly.Load(wc.DownloadData("https://data/from/url.dll")), "__main__", null, false);
}
catch (Exception ex)
{
string text = ex.Message;
Console.WriteLine("Error occurred: {0}", text);
InitializeModuleExDefault = -1;
}
return InitializeModuleExDefault;
}
}
Однако он не будет компилироваться, говоря, что не все пути кода возвращают значение.