问题标签 [clr4.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
632 浏览

.net - .NET 4.5 程序集加载

我希望有人可以解释我所看到的这种行为。我的问题有 3 个主要部分:

  1. 明智的设置
  2. 托管 C++ 程序集
  3. AC#组装

托管 C++ 程序集定义了一个接口,我们称之为ISetupHelper. C# 程序集中有一个实现此接口的类(C# 程序集具有对托管 C++ 程序集的引用)。让我们称之为这个类SetupHelper

由于 Wise 设置无法调用 C# 程序集的目录,因此我们在两者之间有这个托管的 C++ 程序集。安装程序调用一个方法来创建实现的类的接口ISetupHelper。我通过将 2 个字符串传递给 C++ 方法、程序集路径(到 C# 程序集)和类型名称来做到这一点。

C++ 方法如下所示:

多年来,这对我们来说非常有效。现在我们正在尝试添加对 Windows Server 2012/R2 的支持。这些版本的 Windows 分别安装了 4.5 和 4.5.1。

这是发生奇怪问题的地方。如果安装程序是从具有长名称的路径运行的,那么如果您从路径的短版本运行它,它将不起作用。当我说它不起作用时,我的意思是演员阵容失败了。例如:

  • 从该目录运行有效:c:\reallylongname
  • 这不起作用:c:\really~1

我打开了 Fusion 记录器,当转换失败时,它会尝试再次加载 C++ 程序集:

  • LOG:IJW 显式绑定。文件路径:C:\reallylongname\ManagedCPP.dll。
  • 日志:IJW 程序集绑定返回了不同的路径:C:\REALLY~1\ManagedCPP.dll。使用提供的文件。

如果您在仅安装 .NET 4.0 的 Windows Server 2008 R2 机器上执行完全相同的操作,则从短路径运行就可以正常工作(转换成功)。

似乎 CLR 中的某些内容在加载程序集的方式上发生了变化,特别是在加载与已加载程序集同名的程序集时。

0 投票
2 回答
1823 浏览

.net - 为什么安装了 .NET 4 的机器在使用相同 CLR 版本的情况下无法运行针对 .NET 4.5 的 exe?

Common Language Runtime (CLR) Microsoft 页面中,它表示 .Net Framework 4 和 4.5 都使用 CLR 版本 4。

但是,在此页面(.NET Framework 版本和依赖项)中,它写道“.Net Framework 4.5 版包含 CLR 4 的更新版本”

还写道:

'针对 .NET Framework 4.5.1 的可执行文件将被阻止在仅安装了 .NET Framework 4.5 的计算机上运行,​​并且将提示用户安装 .NET Framework 4.5.1。此外,不应从 .NET Framework 4.5 应用程序调用 .NET Framework 4.5.1 程序集。'

问题:如果所有 Net Framework 版本 4 和 4.5 和 4.5.1 在相同的 CLR 版本 4 上运行托管代码,为什么我不能在仅安装了 .Net 4.0 的机器上运行针对 .Net Framework 4.5 的可执行文件?

(不管您的目标是 .NET 框架 4、4.5 还是 4.5.1,编译器最终不会生成适用于 CLR 版本 4 的 IL 吗?)

0 投票
0 回答
234 浏览

c# - CompletionPortCallback 抛出 NullReferenceException

我的应用程序使用 Begin/End 异步 IO 模型,如下所示:

是不是线程启动时调用context.dispose方法去掉了重叠数据导致的问题?但是我必须设置一个时间等待,否则线程会被阻塞很长时间。

0 投票
1 回答
896 浏览

.net - DebugDiag 如何在没有匹配调试 dll 的情况下分析转储文件

尝试分析转储文件时出现以下错误。

我正在使用正确版本的 WinDbg。我也知道我机器上的 sos 版本与捕获转储文件的机器上的版本不同。所以我正在获取正确的版本,看看是否能解决问题。但是我的问题是,当我通过 DebugDiag Analyzer 打开这个转储文件时,它可以读取转储文件并为我提供正确的结果。我只是好奇,当我的机器上没有匹配版本的 sos 和 mscordacwks 时,谁能分析这个转储文件?

0 投票
0 回答
53 浏览

c# - CLR 优化器是否对内部环境具有确定性?

我最近注意到 CLR 优化器中有一些奇怪的行为。特别是,某些简单的方法有时会在发布版本中得到优化。我可以连续运行 10 次相同的程序(无用户/外部输入),其中 3 次将内联其中一种方法,7 次则不会。

所以,我的问题是,CLR 是否有基于外部变量(例如当前 CPU/内存负载)应用的优化DateTime.Now.TotalMilliseconds % 3?现在我知道了“有时”的优化,我可以根据需要解决它,但我很好奇为什么我可能会在同一程序的连续运行中看到不同的行为。

0 投票
2 回答
1995 浏览

c# - Labview .Net 事件


我有一个与LabVIEW一起使用的.Net 4控件/.dll。

该控件公开以下事件:

我想做的是在 LabView 中订阅此事件并使用float[] fNewData. 这样做的正确方法是什么?

当前 VI 回调 VI

0 投票
0 回答
159 浏览

.net - 当服务器安装了 .NET 4.5.X 运行时,我应该更改项目目标框架吗

我的理解是 4.5.X 运行时实际上是对 4.0 运行时的就地升级。换句话说,它取代了 4.0。

但是,如果我在服务器上有应用程序以框架版本 4.0 为目标,它们会开始使用 4.5 框架功能吗?

更重要的是,将我现有的应用程序升级到我的服务器运行时是否被认为是一种好习惯?
因此,转到每个类库、MVC 应用程序等,并将目标框架更改为相应的版本。

这是必需的还是被认为是最佳实践?