使用 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 客户端 的相关文章

  • Silverlight本地存储

    您可能知道 Silverlight 支持本地存储 我们正在考虑创建可在离线模式下工作的 Sl 应用程序 该应用程序可能需要在客户端缓存相当多的数据 显而易见的解决方案 由于性能问题 使用具有某种基于 XMl 结构的本地存储将无法像我们的 P
  • 将 .NET P/Invoke 代码组织为 Win32 API 的最佳实践

    我正在 NET 中重构一个大型且复杂的代码库 该代码库大量使用 P Invoke to Win32 API 该项目的结构不是最好的 我发现 DllImport 语句遍布各处 经常为同一函数重复 并且还以多种方式声明 导入指令和方法有时声明为
  • WPF 元素宿主内存泄漏

    我在 Windows 窗体上使用元素主机时遇到奇怪的内存泄漏 我有一个主窗体 它打开另一个窗体 该窗体上只有 elementhost 控件 此时 它没有 wpf 控件子控件 只能打开 1 个主机表单 每次我打开窗体时 应用程序内存都会增加2
  • 使用 ITextsharp 将 Html 导出为 PDF

    我已经尝试了下面的代码 我也遇到了错误 我正在使用最新的 DLL String strSelectUserListBuilder h1 My First Heading h1 p My first paragraph p String ht
  • 从 C# 检测 powerpoint 形状上的事件

    是否有可能检测在 Powerpoint 形状 例如箭头 上发生的事件 到目前为止 我发现唯一的可能性是 selectitemchanged beforerightclick 和 beforedoubleclick 但无法找到检测其他内容的方
  • 为什么自定义类型变量不保存值MVC

    我正在尝试使用 MVC 5 构建一个网站 我有一个包含 3 个变量的控制器类 public class WorkerController Controller public ViewModel viewModel new ViewModel
  • 在调试模式下单步执行时跳过方法的属性

    是否有一个属性可以在方法上使用 以便在调试模式下单步执行某些代码时 调试器保持在方法的外部 DebuggerStepThrough docs https learn microsoft com en us dotnet api system
  • System.Drawing.Image.Save 抛出ExternalException:GDI 中发生一般错误

    我有一个函数 它需要一个位图 复制它的一部分并将其保存为 8bpp tiff 结果图像的文件名是唯一的并且文件不存在 程序有权写入目标文件夹 void CropImage Bitmap map Bitmap croped new Bitma
  • 具有模型导入功能的免费 opc ua 服务器

    我想为我的应用程序实现 OPC UA 通信 c 我发现一些 OPC UA 服务器模拟 Prosys 和 Softing OPC UA 我可以毫无问题地连接和读取数据 我想要的是实施 Euromap 77 标准 http www euroma
  • 在 DataGridView 中隐藏行非常慢

    我在 Winforms 应用程序中有一个 DataGridView 大约有 1000 行 未绑定 和 50 列 隐藏一列需要整整 2 秒 当我想隐藏大约一半的行时 这就成为一个问题 private void ShowRows string
  • StreamReader,C#,peek

    我有一个 StreamReader 它偶尔会检查它是否有更多内容可以从简单的文本文件中读取 它使用 peek 属性 问题是 当我使用 peek 时 位置发生了变化 尽管不应该发生 FileStream m fsReader new File
  • 解决找不到程序集的问题 |文件未找到异常 |融合日志

    我正在尝试将我的解决方案包 wsp 部署到 SharePoint 2007 环境 WSP 包含一个功能 该功能加载功能接收器类以在运行时部署计时器作业 在部署此 WSP 时 我不断得到 特征 fb631f6c 2c46 4ab5 b7b3
  • 托管 .NET 代码中的“访问冲突写入位置...”

    我收到以下异常 MqSearch exe 中 0x000007FE21AFE593 mscorlib ni dll 处出现未处理的异常 0xC0000005 写入位置 0x00000006609476FD 时出现访问冲突 代码是完全托管的
  • 更换 I 过滤器

    我目前正在使用 IFilters 从各种文件 word excel tiff pdf 等 中提取文本 据我所知 IFilter 已在 Windows 8 中停止使用 是否有人对如何在不安装本机应用程序的情况下提取文本有任何建议 如果有什么用
  • .NET“默认行终止符”?

    有什么方法可以弄清楚 NET 使用什么作为其 默认行终止符 例如 StringBuilder AppendLine String 的文档表示 附加指定字符串的副本 后跟默认行终止符 NET 中的几个与文本相关的类引用相同的概念 有什么方法可
  • 枚举扩展方法

    在vs2008中 是否可以编写适用于任何枚举的扩展方法 我知道您可以针对特定枚举编写扩展方法 但我希望能够使用单个扩展方法对每个枚举进行处理 这可能吗 是的 只需针对基础进行编码Enum类型 例如 public static void So
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 使用.Net/C# 计算集合的频率分布

    是否有一种快速 简单的方法来使用 Linq 或其他方式计算 Net 集合的频率分布 例如 任意长的 List 包含许多重复项 遍历列表并计算 跟踪重复次数的巧妙方法是什么 查找列表中重复项的最简单方法是将其分组 如下所示 var dups
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org

随机推荐

  • 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