Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

System.Diagnostics.Tracing in Mono

I am trying to create an application in MonoDevelop 4.2.3 using assemblies I created with Visual Studio for .NET 4.5, but I get this warning:

/usr/lib/mono/4.5/Microsoft.Common.targets: Warning: Reference 'System.Diagnostics.Tracing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' not resolved (ListenerBinTest)

And of course, it fails with this error when I try to run the app:

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

To be honest, I do not use anything related with System.Diagnostics.Tracing, but apparently System.Threading.Tasks.Dataflow does.

This is my setup:

=== 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

How may I solve this problem?

Thanks.

like image 838
vtortola Avatar asked May 10 '14 13:05

vtortola


Video Answer


1 Answers

Unfortunately Mono 3.2.8 does not have the System.Diagnostics.Tracing.dll as part of its full .NET framework implementation.

However should be able to workaround this by copying the PCL version of the System.Diagnostics.Tracing.dll into your project and referencing that. This assumes you are not actually using any of the System.Diagnostics.Tracing.dll in your project since the PCL library may not have any implementation.

With Mono 3.4.0 installed you can copy one of the System.Diagnostics.Tracing.dll files. To test everything worked I copied the following file into my project:

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

This is on the Mac. You will need to find the file since the location will be different on Linux and it may be in different location in Mono 3.2.8. It seems to be in Profile7 which should be included with Mono 3.2.8. The .dll is also available from Microsoft in the Portable Library Reference Assemblies download. Unfortunately that download requires Windows to be able to install a .zip file with the portable library dlls.

The file was copied into the project since you cannot browse to it with Xamarin Studio whilst adding a reference. This is because it is in a directory that is hidden because the directory starts with a dot.

Directly referencing the System.Diagnostics.Tracing.dll in my project I could get Microsoft's example DataFlow code working.

like image 101
Matt Ward Avatar answered Sep 22 '22 06:09

Matt Ward