【问题标题】:System.Diagnostics.Tracing in MonoMono 中的 System.Diagnostics.Tracing
【发布时间】:2014-06-28 04:42:02
【问题描述】:

我正在尝试使用我用 Visual Studio for .NET 4.5 创建的程序集在 MonoDevelop 4.2.3 中创建一个应用程序,但我收到以下警告:

/usr/lib/mono/4.5/Microsoft.Common.targets:警告:参考 'System.Diagnostics.Tracing,版本=4.0.0.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a' 未解析(ListenerBinTest)

当然,当我尝试运行应用程序时,它会失败并出现此错误:

System.IO.FileNotFoundException: Could not load file or assembly 'System.Diagnostics.Tracing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
  at System.Threading.Tasks.Dataflow.TransformBlock`2[System.Net.Sockets.Socket,vtortola.WebSockets.WebSocketListener+WebSocketNegotiationResult]..ctor (System.Func`2 transform, System.Threading.Tasks.Dataflow.ExecutionDataflowBlockOptions dataflowBlockOptions) [0x00000] in <filename unknown>:0
  at vtortola.WebSockets.WebSocketListener..ctor (System.Net.IPEndPoint endpoint, vtortola.WebSockets.WebSocketListenerOptions options) [0x00000] in <filename unknown>:0
  at vtortola.WebSockets.WebSocketListener..ctor (System.Net.IPEndPoint endpoint) [0x00000] in <filename unknown>:0
  at ListenerBinTest.MainClass.Main (System.String[] args) [0x00010] in /home/vtortola/ListenerBinTest/ListenerBinTest/Program.cs:12

说实话,我不使用与System.Diagnostics.Tracing 相关的任何东西,但显然System.Threading.Tasks.Dataflow 使用。

这是我的设置:

=== MonoDevelop ===
Version 4.2.3
Installation UUID: 2798c094-3f0b-42d7-afe4-2984107bea4e
Runtime:
    Mono 3.2.8 (tarball Mon Mar 10 19:20:49 UTC 2014) (64-bit)
    GTK+ 2.24.22 theme: oxygen-gtk
    GTK# (2.12.0.0)

=== Build Information ===
Git revision:
Build date: 2014-03-10 20:43:25+0000

=== Operating System ===
Linux
Linux linux-nt8h.site 3.11.10-7-desktop #1 SMP PREEMPT Mon Feb 3 09:41:24 UTC 2014 (750023e) x86_64 x86_64 x86_64 GNU/Linux

我该如何解决这个问题?

谢谢。

【问题讨论】:

    标签: mono monodevelop system.diagnostics


    【解决方案1】:

    不幸的是,Mono 3.2.8 没有 System.Diagnostics.Tracing.dll 作为其完整 .NET 框架实现的一部分。

    但是应该能够通过将 System.Diagnostics.Tracing.dll 的 PCL 版本复制到您的项目中并引用它来解决此问题。这假设您实际上并未在项目中使用任何 System.Diagnostics.Tracing.dll,因为 PCL 库可能没有任何实现。

    安装 Mono 3.4.0 后,您可以复制其中一个 System.Diagnostics.Tracing.dll 文件。为了测试一切正常,我将以下文件复制到我的项目中:

    /Library/Frameworks/Mono.framework/Versions/3.4.0/lib/mono/xbuild-frameworks/.NETPortable/v4.5/System.Diagnostics.Tracing.dll
    

    这是在 Mac 上。您需要找到该文件,因为 Linux 上的位置会有所不同,并且在 Mono 3.2.8 中它可能位于不同的位置。它似乎在应包含在 Mono 3.2.8 中的 Profile7 中。 .dll 也可以从 Microsoft 的Portable Library Reference Assemblies 下载中获得。不幸的是,该下载要求 Windows 能够安装带有可移植库 dll 的 .zip 文件。

    该文件已复制到项目中,因为在添加引用时无法使用 Xamarin Studio 浏览它。这是因为它位于一个隐藏的目录中,因为该目录以点开头。

    在我的项目中直接引用 System.Diagnostics.Tracing.dll 我可以让微软的example DataFlow code 工作。

    【讨论】:

    • 非常感谢,但不幸的是它没有用。我在 Windows 机器中安装了便携式库参考,获取库,并添加您提到的文件,现在我收到两个警告而不是一个。第一个只是说“/usr/lib/mono/4.5/Microsoft.Common.targets:警告:参考'System.Diagnostics.Tracing'未解决(ListenerBinTest)”,第二个和我之前说的一样。当我运行它时,我得到了和以前一样的错误。
    • 我在哪里可以获得单声道 3.4?仅来自来源? (单项目页面中的链接为您提供 3.2.3,而不是下载页面预期的 3.4.0)
    • 我认为 Mac 上只有 Mono 3.4 的二进制版本。据我所知,Mono 3.4 提供了 Microsoft 在该下载中提供的相同二进制文件,因此它们应该可以工作。我将在 Linux 机器上测试它。
    • 在 OpenSuse 12.3 和 Mono 3.2.3 和 MonoDevelop 4.0.12 上试过这个,它似乎工作。我将 v4.5/System.Diagnostics.Tracing.dll 文件从 Microsoft 的 zip 文件复制到 Linux 机器。创建了一个 C# 控制台应用程序,将其切换为 .NET 4.5,添加了 Tpl DataFlow NuGet 包,从 Microsoft 网站上的示例中复制了代码。直接运行它会失败,在引用跟踪 PCL 程序集之前找不到程序集。然后在添加对 System.Diagnostics.Tracing.dll 的引用后,应用程序运行没有任何错误。
    • 我使用的是 Windows 的数据流库。我在 MonoDevelop 中安装了 NuGet,然后包含了数据流,现在没有任何警告,它似乎可以运行。我现在正在检查它是否正常工作......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2012-08-06
    相关资源
    最近更新 更多