使用 opc ua .net 库在 Unity3d 中创建一个非常简单的 OPC 客户端

2023-12-14

我在尝试实现一个简单的方法时遇到这些错误OPC使用 Unity3D 的 .Net 客户端。这些错误出现在 Visual Studio 中:

Severity    Code    Description Project File    Line    Suppression State
Error   CS0012  The type 'X509CertificateValidator' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.ServiceModel.Primitives, Version=4.5.0.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Test    C:\Users\hidethepain\Documents\opc\Assets\main.cs   27  

Severity    Code    Description Project File    Line    Suppression State
Error   CS0012  The type 'Enum' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.    Test, Test.Player   C:\Users\hidethepain\Documents\opc\Assets\main.cs   18  Active

Severity    Code    Description Project File    Line    Suppression State
Error   CS0012  The type 'Task<>' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.  Test, Test.Player   C:\Users\hidethepain\Documents\opc\Assets\main.cs   31  Active

以及其他49个类似的错误。

Unity3D 向我显示此错误:

Assets/main.cs(67,40): error CS0012: The type `System.Object' is defined in an assembly that is not referenced. Consider adding a reference to assembly `netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'

Unity3D 使用脚本运行时版本 .Net 3.5 我将其更改为 .NET 4.6 以便能够使用OPC库.

这是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using Opc.Ua; 
using Opc.Ua.Client;
using Opc.Ua.Configuration;

public class main : MonoBehaviour
{

    private async void Start()
    {
        Console.WriteLine("Step 1 - Create a config.");
        var config = new ApplicationConfiguration()
        {
            ApplicationName = "test-opc",
            ApplicationType = ApplicationType.Client,
            SecurityConfiguration = new SecurityConfiguration { ApplicationCertificate = new CertificateIdentifier() },
            TransportConfigurations = new TransportConfigurationCollection(),
            TransportQuotas = new TransportQuotas { OperationTimeout = 15000 },
            ClientConfiguration = new ClientConfiguration { DefaultSessionTimeout = 60000 }
        };
        await config.Validate(ApplicationType.Client);
        if (config.SecurityConfiguration.AutoAcceptUntrustedCertificates)
        {
            config.CertificateValidator.CertificateValidation += (s, e) => { e.Accept = (e.Error.StatusCode == StatusCodes.BadCertificateUntrusted); };
        }

        Console.WriteLine("Step 2 - Create a session with your server.");
        using (var session = await Session.Create(config, new ConfiguredEndpoint(null, new EndpointDescription("opc.tcp://localhost:4841")), true, "", 60000, null, null))
        {
            Console.WriteLine("Step 3 - Browse the server namespace.");
            ReferenceDescriptionCollection refs;
            byte[] cp;
            session.Browse(null, null, ObjectIds.ObjectsFolder, 0u, BrowseDirection.Forward, ReferenceTypeIds.HierarchicalReferences, true, (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, out cp, out refs);
            Console.WriteLine("DisplayName: BrowseName, NodeClass");
            foreach (var rd in refs)
            {
                Console.WriteLine(rd.DisplayName + ": " + rd.BrowseName + ", " + rd.NodeClass);
                ReferenceDescriptionCollection nextRefs;
                byte[] nextCp;
                session.Browse(null, null, ExpandedNodeId.ToNodeId(rd.NodeId, session.NamespaceUris), 0u, BrowseDirection.Forward, ReferenceTypeIds.HierarchicalReferences, true, (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, out nextCp, out nextRefs);
                foreach (var nextRd in nextRefs)
                {
                    Console.WriteLine("+ " + nextRd.DisplayName + ": " + nextRd.BrowseName + ", " + nextRd.NodeClass);
                }
            }

            Console.WriteLine("Step 4 - Create a subscription. Set a faster publishing interval if you wish.");
            var subscription = new Subscription(session.DefaultSubscription) { PublishingInterval = 1000 };

            Console.WriteLine("Step 5 - Add a list of items you wish to monitor to the subscription.");
            var list = new List<MonitoredItem> {
                new MonitoredItem(subscription.DefaultItem) { DisplayName = "aaatime", StartNodeId = "i=10004" } };
            list.ForEach(i => i.Notification += OnNotification);
            subscription.AddItems(list);

            Console.WriteLine("Step 6 - Add the subscription to the session.");
            session.AddSubscription(subscription);
            subscription.Create();

            Console.WriteLine("Finished client initialization");
        }
    }

    private static void OnNotification(MonitoredItem item, MonitoredItemNotificationEventArgs e)
    {
        foreach (var value in item.DequeueValues())
        {
            Console.WriteLine("{0}: {1}, {2}, {3}", item.DisplayName, value.Value, value.SourceTimestamp, value.StatusCode);
        }
    }
}

该代码移植自.Net Core 示例到 Unity3d。 我该如何解决这些错误?


文档位于GitHub OPC 统一架构 .NET 标准假设最低要求是 .NET Standard 2.0。
根据 Unity 论坛适用于 UWP/HoloLens 的 .NET 堆栈是什么?开发人员只要选择 .NET 作为,就只能使用 .NET Standard 版本 1.4脚本后端在播放器设置中。

我没有测试这个特定的库,但我认为当你切换到 IL2CPP 时它应该可以工作,因为它支持 2.0。

从 2018.2 版本开始,Unity 将 .NET 标记为已弃用,因此我认为他们将来不会做出很大的努力来改变这种情况,而是会专注于 IL2CPP。
遗憾的是,我喜欢 .NET 的短构建周期

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 opc ua .net 库在 Unity3d 中创建一个非常简单的 OPC 客户端 的相关文章

  • c#.net 中委托事件的超级简单示例? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要一个非常简单的例子来了解自己对这些事件的了解 我觉得很难理解互联网或书籍上提供的示例 这是公开事
  • C# - 挂钩现有 COM 对象

    假设我们有一个现有进程 或应用程序 它从 ocx 文件 例如 MyCOMLibrary ocx 调用 COM 对象 有没有办法编写一个 C 库来精确复制 ocx 文件 这样原始应用程序就可以调用您的 C 代码而不是原始 COM 对象 当然
  • Python 仪器驱动程序

    我是一名实验物理学家 并且是Python http en wikipedia org wiki Python 28programming language 29 我发现它非常适合数据分析和脚本编写 实际上我还用它来连接实验室仪器 网络分析仪
  • 如何在 MSVS 2012+ 编辑器(和 .NET?)中使用正则表达式替换插入“\”+“n”

    在 Visual Studio 2013 的编辑器中 我理解它与 2012 非常相似 据称使用 NET 正则表达式 我无法获取替换字符串来插入反斜杠和 n 这可能吗 我想插入 n 在第一个 之后 在 C 程序的某些 但不是全部 行上 即使字
  • 如何让 XDocument.Load 保留换行符

    using System IO StreamReader sr new System IO StreamReader path System Text Encoding GetEncoding Windows 1252 true xdoc
  • WCF 和数据契约上的接口

    使用 svcutil 创建 WCF 代理时 是否还可以包含数据协定继承的接口 例如 public class SomeType ISometype public string Name get set public interface IS
  • 如何将现有对象实例包装到 DispatchProxy 中?

    我在找RealProxy NET Core 中的替换 以及这个issue https github com dotnet corefx issues 4091将我转发至DispatchProxy https www nuget org pa
  • 无法使用前导 ../ 在顶级目录之上退出

    我有一个 asp net 网站 我们有管理区域 其中的登录页面仅供管理员使用 并且所有网站都允许所有人使用 当我收到此错误时 我需要询问如何为其定义正确的安全配置 Cannot use a leading to exit above the
  • 如何调试.NET Windows Service OnStart方法?

    我用 NET 编写的代码仅在作为 Windows 服务安装时才会失败 该故障甚至不允许服务启动 我不知道如何进入 OnStart 方法 如何 调试 Windows 服务应用程序 http msdn microsoft com en us l
  • Unity - 在生成时获取随机颜色

    我有一个小问题 我想在我的场景中生成四边形 它们都应该有红色或绿色作为材质 但 Random Range 函数只能是 int 我该如何解决它 void SpawningSquadsRnd rndColor 0 Color red rndCo
  • 异步迭代器 Task>

    我正在尝试实现一个返回迭代器的异步函数 这个想法如下 private async Task
  • 异步protobuf序列化

    protobuf net 实现的一个限制是它同步调用底层流 通过不提供异步 API 例如BeginSerialize EndSerialize 或 TPL 等效项 我们被迫占用一个等待同步流 I O 的线程 是否有计划在 protobuf
  • 为什么我的 WPF XAML Grid TranslateTransform.X 不会?

    我可以使用它来更改网格的宽度 高度 那么为什么当我这样使用 Grid RenderTransform TranslateTransform X 时它不起作用
  • Install-Package:无法解析远程名称:“packages.nuget.org”[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 无缘无故地
  • 找不到文件异常..但它就在那里

    嘿 这将是那些愚蠢的问题之一 我试图在本地系统上获取一个文件 但我不断收到FileNotFoundException thrown 请有人纠正我 if File Exists C logs hw healthways prod 2009 0
  • 获取字母数字值的 Max()

    我有一个包含字母数字 ID 的字典 例如 a10a10 和 d10a9 我想要其中最大的 ID 意思是 9 当我使用以下代码时 d10a9 是 MAX 因为 9 排在 10 之前 var lsd new Dictionary
  • 如何让实体框架初始化新创建的实体上的集合?

    我正在尝试用一些测试数据来种子我的数据库IDatabaseIntialiser像这样 protected override void Seed BlogDataContext context
  • .Net 中是否有一个框架属性可以隐藏成员以使其免受反射?

    是否有一个属性可以隐藏成员 特别是属性 typeof MyType GetProperties 在 net中 我正在寻找快速修复方法 即不创建自定义属性等 thanks No 反射允许人们看到一切 包括标记为私有的成员 最终反射使用与 CL
  • SignTool 错误:访问被拒绝

    我尝试在安装了 VS2010 的 Windows Server 2008 R2 x64 上使用新的代码签名证书对 NET 应用程序进行authenticode 签名 但 SignTool 始终响应访问被拒绝 SignTool exe sig
  • 如何将 Metro 应用部署到桌面?

    我正在尝试将我的 C 应用程序部署到我的 Windows 8 Metro 桌面 我可以在 bin 文件夹中看到部署的文件 但是当我尝试打开它们时 出现以下错误 该应用程序只能在 AppContainer 的上下文中运行 我检查了属性上下文菜

随机推荐

  • mysql 搜索不带空格

    我的数据库中有一个名称列表 我必须找到在 url 中传递的名称的 id 我的问题是 我在 url 中传递的名称中不会有空格 而保存的记录将在数据库中 当我搜索数据库时 我没有找到任何记录 例如 数据库记录是 我的名字 而我将在 url 中传
  • 原型中的对象作为引用继承

    我想使用原型继承新的对象实例 测试用例 var MyObj function MyObj prototype objName I want this to be a different object for each instance of
  • Java 如何决定何时导入?

    为什么Java不需要导入Integer String等类 而需要导入其他类 有一个隐含的导入java lang 来自Java规范 编译单元自动访问其包中声明的所有类型 并自动导入预定义包中声明的所有公共类型java lang
  • 在验证属性时将两个正则表达式合并为一个

    我有两个正则表达式 RegularExpression ErrorMessage Something 验证仅包含空格的字符串 不包含任何其他字符 前任 length 7 RegularExpression ErrorMessage some
  • 在 Powershell 电子邮件中设置 HTML 字体颜色

    我有一个 powershell 脚本 将为密码将在 这是我当前正在使用的代码 我还要补充一点 这是我第一次尝试在 powershell 中编写脚本 因此如果我长期做事 我会接受一些输入 Import ActiveDirectory modu
  • 使用 Inno Setup 安装的应用程序的 Windows 10 开始图标上下文菜单中缺少卸载选项

    我使用 Inno Setup 5 5 9 创建了一个安装文件 然后在 Windows 10 计算机上运行该文件 我唯一的问题与卸载程序有关 我可以使用控制面板来卸载 但是在 开始 菜单中 当我右键单击启动程序的快捷方式时 上下文菜单中没有选
  • pyenchant 在 Mac OS X 上找不到字典文件

    我在运行 Lion 的 MacbookPro 上安装 pyenchant 时遇到问题 我使用 homebrew 和 pip 来安装 enchant 和 pyenchant 自制安装附魔 pip 安装 pyenchant 我还下载了一本英语词
  • 使用乔达时间将一个时区转换为另一时区

    有一个表格有一个国家 地区下拉菜单 用户将选择国家 地区 然后有一个时区下拉菜单 用户将选择用户选择的国家 地区可用的时区 然后用户将输入本地日期 例如 2014 年 12 月 26 日 和时间 23 11 24 小时时间 此输入的日期和时
  • OpenSSL 的链接错误[重复]

    这个问题在这里已经有答案了 我已经安装了 OpenSSL 我只想使用 OpenSSL 运行一个程序 这是我的程序 摘自here include
  • jQuery 对象:缓存还是不缓存?

    我的 Javascript JS 代码遇到了一些麻烦 因为有时我需要在同一个函数中多次访问相同的 DOM 元素 还提供了一些推理here 从性能的角度来看 是一次性创建一个 jQuery 对象然后缓存它更好 还是随意创建同一个 jQuery
  • 使用 LINQ 从两个列表中选择不同的元素?

    List
  • 在 WPF 中使用图片或图标代替 DataGridCheckBoxColumn

    我想在选中时将 DataGridColumn 内部的复选框更改为图像 在未选中时将其更改为图像 我该怎么办 Ps 我的DataGridCheckBoxColumn定义如下
  • PyQT4 WheelEvent?如何检测车轮是否被使用过?

    我想在 PyQT 中找出如何设置鼠标滚轮事件 我需要它 以便我可以将其附加到 Qscroll 区域 我使用的代码工作正常 但大小是硬编码的 我需要它以某种方式动态调整 具体取决于滚轮 鼠标上 的使用方式 就像我向上滑动鼠标滚轮时一样 我的框
  • 限制选中的复选框数量

    我有一个带有几个复选框的表单 我的表单中有三类复选框 我需要限制最多三个复选框per类别 我使用了这个脚本 但它限制每个表单三个复选框 jQuery function var max 3 var checkboxes jQuery inpu
  • 通过 SMTP 发送邮件 Gmail Oauth2 问题

    我可以通过以下方式对 SMTP 进行身份验证谷歌的例子 但现在的问题是我无法发送邮件 每当我尝试发送邮件时 都会收到以下错误 com sun mail smtp SMTPSendFailedException 530 5 5 1 Authe
  • 如何从 Kivy 中的另一个小部件访问某些小部件属性?

    好吧 假设我希望某个小部件中的标签使用另一个小部件内标签中的文本
  • 消除移动 Safari 中点击事件的 300 毫秒延迟

    我读过移动版 Safari 在点击事件上有 300 毫秒的延迟从点击链接 按钮到事件触发 延迟的原因是等待用户是否打算双击 但从 UX 角度来看 等待 300 毫秒通常是不可取的 一种解决方案要消除这 300 毫秒的延迟 可以使用 jQue
  • 使用 Python 将 DOCX 文件转换为文本文件

    我编写了以下代码将 docx 文件转换为文本文件 我在文本文件中打印的输出是整个文件的最后一段 部分 而不是完整的内容 代码如下 from docx import Document import io import shutil def c
  • Mac Catalina 安装 Xdebug

    我一整天都在努力让 xdebug 工作 我尝试完全重新安装自制程序 清除 php 并安装最新版本 重新安装 apache 如下 https getgrav org blog macos catalina apache multiple ph
  • 使用 opc ua .net 库在 Unity3d 中创建一个非常简单的 OPC 客户端

    我在尝试实现一个简单的方法时遇到这些错误OPC使用 Unity3D 的 Net 客户端 这些错误出现在 Visual Studio 中 Severity Code Description Project File Line Suppress