我需要在词典中创建选项的帮助 选项

问题描述 投票:0回答:1

我正在构建一个IronPython程序,该程序将从URL执行指定的* .dll。这是一个代码段:

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;
    }
}

但是它不会编译,并不是所有的代码路径都返回一个值。

c# ironpython
1个回答
0
投票

如果我是你,我会这样做。

我将保留现有方法,然后创建一个新方法。谁知道将来随着需求的变化我可能会需要它。

我们将其命名为InitializeModuleExDefault,没有选项参数,因为它是默认值,我将在方法内指定默认值。

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
}
© www.soinside.com 2019 - 2024. All rights reserved.