Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使MacOS上的.NET核心应用程序可编写脚本(使用Applescript)?_C#_Macos_.net Core_Applescript - Fatal编程技术网

C# 如何使MacOS上的.NET核心应用程序可编写脚本(使用Applescript)?

C# 如何使MacOS上的.NET核心应用程序可编写脚本(使用Applescript)?,c#,macos,.net-core,applescript,C#,Macos,.net Core,Applescript,直截了当地问: 如何使用Applescript使简单的.NET核心控制台应用程序可编写脚本? 为了进行实验,我们假设我的应用程序如下所示: using System; using System.Threading; using System.Threading.Tasks; namespace ScriptableCsharpApp { class Program { public static CancellationTokenSource Cancellat

直截了当地问: 如何使用Applescript使简单的.NET核心控制台应用程序可编写脚本?

为了进行实验,我们假设我的应用程序如下所示:

using System;
using System.Threading;
using System.Threading.Tasks;

namespace ScriptableCsharpApp
{
    class Program
    {
        public static CancellationTokenSource CancellationTokenSource { get; set; } 
            = new CancellationTokenSource();
        public static int StaticCounter { get; set; } = 0;
        static void Main(string[] args)
        {
            Console.WriteLine("Running!");

            AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;

            CancellationTokenSource.Token.WaitHandle.WaitOne();

            Console.WriteLine("Shutting Down!");
        }

        private static Response GetFullResponse()
        {
            return new Response()
            {
                Counter = StaticCounter++,
                Message = "Hello from C#!"
            };
        }

        private static string GetMessage()
        {
            StaticCounter++;
            return "Hello from C#!";
        }

        private static void CurrentDomain_ProcessExit(object sender, EventArgs e)
        {
            CancellationTokenSource.Cancel();
        }
    }

    public class Response
    {
        public int Counter { get; set; }
        public string Message { get; set; }
    }
}
级别1:如何使以下脚本在应用程序运行时从GetMessage()返回消息:

tell application "ScriptableCsharpApp"
 set message to get message 
 return message 
end tell 
级别2:在应用程序运行时,如何使以下脚本返回GetFullResponse结果的Message属性:

tell application "ScriptableCsharpApp"
 set response to get full response
 set message to message of response
 return message 
end tell 
编辑 一条评论声称没有足够的信息。我很困惑,但好吧,让我们在这里非常详细:

  • 在Windows上,安装.NET Core 3.x SDK
  • 在Windows上打开Visual Studio 2019
  • 文件->新建->项目->.NET核心控制台应用程序(C#)
  • 通过Program.cs从上面复制粘贴代码
  • Ctrl+。要解决缺少的引用(应为线程内容添加NuGet pkg)
  • 压缩解决方案文件夹,将其发送到Mac,解压缩到某个地方
  • 在Mac上,安装.NET Core 3.x运行时
  • 在terminal.app中,导航到解决方案文件夹并运行“dotnet ScriptableCsharpApp”
现在你有了一个无窗口的应用程序,可以一直运行到你(x)离开它为止

任务是解释需要进行哪些代码更改,这样我就可以打开AppleScript编辑器,创建新的AppleScript,复制粘贴上面提到的脚本并运行它以获得所需的结果


足够详细?

不够详细,无法回答您的问题,伙计。嘿-编辑以获取更多详细信息。如果没有本机macOS事件循环,我怀疑答案是:您没有。您可以通过基础框架的NSPApEnEngestMeor或旧的碳C API来安装Apple事件处理程序,但它们仍然需要一些东西来激发它们。如果将其设置为标准CLI可执行文件,则AppleScript可以通过标准的Additions“
do shell script
命令运行它(注意,它不支持stdin;仅使用argv和stdout)。感谢您的评论,尽管我承认我不理解您在哪里调用Mac特定的东西^(我不太了解MacOS,也从未用Swift或Obj-C编程).但我明白这并不容易。好吧,明白了。一个用Obj-C或Swift编写的原生MacOS应用程序如何,与我的主.NET核心应用程序一起部署,其唯一目的是通过grpc调用主应用程序?我的应用程序本身并不是可以编写脚本的,但功能上应该是一样的。我想这应该是一样的一个全新的问题:p这将是放置“AppleScriptable”的一种方式围绕.NET CLI应用程序的GUI外壳。作为ObjC/Swift,它可以使用NSTask/Process启动并与后者通信。在不知道你的.NET应用程序的功能的情况下,很难提出任何建议。就个人而言,我现在不会在AppleScript开发上投入太多精力:它是一种旧的、传统的技术,现在处于维护模式,并且非常有用不受欢迎。随着苹果新的快捷方式应用程序有望在10.16版登陆,希望苹果能在今年晚些时候为我们提供一个更清晰的关于WWDC Mac自动化未来的图片。