Why its not working? - c#

BinaryReader br = new BinaryReader(Console.OpenStandardInput());
BinaryWriter bw = new BinaryWriter(Console.OpenStandardOutput());
int n = br.ReadInt32();
bw.Write(n);
always getting this error:
Unhandled Exception: System.IO.EndOfStreamException: Failed to read past end of stream.
at System.IO.BinaryReader.FillBuffer (Int32 numBytes) [0x00000] in <filename unknown>:0
at System.IO.BinaryReader.ReadInt32 () [0x00000] in <filename unknown>:0
at Program.Main () [0x00025] in /home/skydos/ACM/Csharp/Csharp/Main.cs:24
Is there any way to make reading data in C# faster from Console?

Are you writing anything to the standard input of your program? The error says there's no data available, quite simple.

There are plenty of examples in the MSDN documentation on how to go about dealing with System.IO stuff. Maybe this link will get you started?
http://msdn.microsoft.com/en-us/library/ms404278.aspx?appId=Dev10IDEF1&l=EN-US&k=k(SYSTEM.IO.BINARYREADER);k(TargetFrameworkMoniker-%22.NETFRAMEWORK&k=VERSION=V4.0%22);k(DevLang-CSHARP)&rd=true
If speed is your main concern, perhaps this article at Code Project will give you some ideas:
http://www.codeproject.com/KB/files/fastbinaryfileinput.aspx

Related

Fo-dicom code compiling but not executing

I am trying following code to convert a dicom file to jpeg:
using System;
using System.IO;
using System.Drawing;
using Dicom.Imaging;
class RnReadDicom{
public static void Main(string[] args){
string fileName = "33141578.dcm";
var image = new DicomImage(fileName);
image.RenderImage().AsSharedBitmap().Save(#"test.jpg");
}}
I am compiling it with following command:
$ mcs a.cs -r:Dicom.Core.dll -r:Dicom.Native.dll -r:System.Drawing
The code compiles without any error but on running the exe file, it gives following error:
$ ./a.exe
Unhandled Exception:
System.TypeInitializationException: The type initializer for 'Dicom.DicomEncoding' threw an exception. ---> System.NullReferenceException: Object reference not set to an instance of an object
at Dicom.IO.IOManager.get_BaseEncoding () [0x00000] in <4b7c269b3e704f3f83dd85bb2721c76a>:0
at Dicom.DicomEncoding..cctor () [0x00000] in <4b7c269b3e704f3f83dd85bb2721c76a>:0
--- End of inner exception stack trace ---
at Dicom.Imaging.DicomImage..ctor (System.String fileName, System.Int32 frame) [0x00000] in <4b7c269b3e704f3f83dd85bb2721c76a>:0
at RnReadDicom.Main (System.String[] args) [0x00006] in <5c119b113a6e4d4b8058662dd31bab14>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: The type initializer for 'Dicom.DicomEncoding' threw an exception. ---> System.NullReferenceException: Object reference not set to an instance of an object
at Dicom.IO.IOManager.get_BaseEncoding () [0x00000] in <4b7c269b3e704f3f83dd85bb2721c76a>:0
at Dicom.DicomEncoding..cctor () [0x00000] in <4b7c269b3e704f3f83dd85bb2721c76a>:0
--- End of inner exception stack trace ---
at Dicom.Imaging.DicomImage..ctor (System.String fileName, System.Int32 frame) [0x00000] in <4b7c269b3e704f3f83dd85bb2721c76a>:0
at RnReadDicom.Main (System.String[] args) [0x00006] in <5c119b113a6e4d4b8058662dd31bab14>:0
Where is the problem and how can it be solved? Thanks for your help.
Edit: I am having similar problem with another library for which I have posted another question. This is using a different library and the error is also different. I suspect answers to these questions will be different hence these are not duplicate question. Moreover, the other question does not have any answer yet.
This is probably due to the garbage collector destroying the image object. The Bitmap only contains a reference to the pixel data of the image to save space.
This has been described here before: C# System.Drawing.Image.get_Width() throws exception on WinForms form is maximized
To solve this, use it as this:
var image = new DicomImage(fileName);
image.RenderImage().AsClonedBitmap().Save(#"test.jpg");
By cloning, a real copy of the pixel data is performed.
However, it could be sometimes even trickier: If you e. g. use .NET Core as a starting project and the library, which references fo-dicom uses .NET Standard, you have to add either of these to the start of your program:
TranscoderManager.SetImplementation(new MonoTranscoderManager()); // limited codecs, but full .NET Core, runs on Linux. Or:
TranscoderManager.SetImplementation(new DesktopTranscoderManager()); // loads also native dlls, runs on Windows
ImageManager.SetImplementation(new RawImageManager()); // if you need .NET Core, you only have byte arrays
ImageManager.SetImplementation(new WinFormsImageManager()); //if you run Windows and have GDI
NetworkManager.SetImplementation(new DesktopNetworkManager()); // if you want to run dicom services

Timed out waiting for result of ClearAppData2 when running Xamarin UI Tests for Android

I've created automatic Android and iOS UI-Tests for my Xamarin application with the Xamarin UITest framework. When running the tests locally, they work fine, but when running them on the Bitrise CI, the iOS tests run fine, but the Android UI Tests keep failing with the following exception:
StartFirstActivity_WaitForActivity_ExpectButtonToHaveText
SetUp : System.Exception : Timed out waiting for result of ClearAppData2
Stack trace:
at Xamarin.UITest.Shared.Android.Commands.CommandAdbClearAppData.Execute (IProcessRunner processRunner, IAndroidSdkTools androidSdkTools) <0x38b3e90 + 0x0064b> in <filename unknown>:0
at Xamarin.UITest.Shared.Execution.Executor.Execute[TDep1,TDep2] (ICommand2 command) <0x32b6478 + 0x00092> in <filename unknown>:0
at Xamarin.UITest.Shared.Android.LocalAndroidAppLifeCycle.EnsureInstalled (Xamarin.UITest.Shared.Android.ApkFile appApkFile, Xamarin.UITest.Shared.Android.ApkFile testServerApkFile) <0x37418c8 + 0x0017a> in <filename unknown>:0
at Xamarin.UITest.Android.AndroidApp..ctor (IAndroidAppConfiguration appConfiguration) <0x31a15e8 + 0x0047a> in <filename unknown>:0
at Xamarin.UITest.Configuration.AndroidAppConfigurator.StartApp (AppDataMode appDataMode) <0x30b4298 + 0x00063> in <filename unknown>:0
at SightPlayer.Core.Test.AppInitializer.StartApp (Platform platform) <0x30b2448 + 0x000ef> in <filename unknown>:0
at SightPlayer.Core.Test.Tests.BeforeEachTest () <0x30b23f8 + 0x00013> in <filename unknown>:0
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) <0x30b2208 + 0x00093> in <filename unknown>:0
Android test are running with Xamarin.UITest version 1.3.5. This is important, as there seems to have been a bug until version 1.3.3. I've also tried ignoring failing tests, but then the test-runner fails with other Android tests. Interestingly enough that sometimes individual tests pass.
Has anyone encountered this behaviour before? Do you have any advice on how to fix this?
When decompiling CommandAdbClearAppData (which throws the exception), I see
// ISSUE: reference to a compiler-generated field
string str1 = string.Format("/data/data/{0}/files/calabash_failure.out", (object)executeCAnonStorey0.svr);
// ISSUE: reference to a compiler-generated field
string str2 = string.Format("/data/data/{0}/files/calabash_finished.out", (object)executeCAnonStorey0.svr);
while (DateTime.UtcNow < utcNow + TimeSpan.FromSeconds(10.0))
{
if (func(string.Format("ls {0}", (object)str1)).Output.Trim().Equals(str1))
throw new Exception("Clear app data failed with " + func(string.Format("cat {0}", (object)str1)).Output);
if (func(string.Format("ls {0}", (object)str2)).Output.Trim().Equals(str2) && func(string.Format("cat {0}", (object)str2)).Output.Trim().Equals("SUCCESSFUL"))
return;
}
throw new Exception("Timed out waiting for result of ClearAppData2");
which indicates that the generated file could not be found within ten seconds. Could it be, that the emulator is simply too slow and the emulator takes longer than ten seconds to create those files?
Could it be, that the emulator is simply too slow and the emulator takes longer than ten seconds to create those files?
Yes, that could be the problem.
Do you have any advice on how to fix this?
The latest dev builds of the Xamarin.UITest nuget package have increased that timeout interval from 10 seconds to 60 seconds.
Try Xamarin.UITest 1.3.6.1476-dev or newer.
I solved this issue uploading a unsigned version of the APK to my testing device (same thing for Xamarin Android Player). I had to uncheck the "Sign the .APK file" box from the Android Package Signing option in the project properties. The WaitTimes way didn't work for me.
I think you need to look at some Configuration
If your app is not waiting to launch the test you could implement WaitTimes.
Create a class like this:
public class WaitTimes : IWaitTimes
{
public TimeSpan GestureWaitTimeout
{
get { return TimeSpan.FromMinutes(1); }
}
public TimeSpan WaitForTimeout
{
get { return TimeSpan.FromMinutes(1); }
}
}
Then implement it like this:
_app = ConfigureApp
.Android
.EnableLocalScreenshots()
.ApkFile(apkFile)
.DeviceSerial("###")
.ApiKey("###")
.Debug()
.WaitTimes(new WaitTimes())
.StartApp();
Otherwise you could just wait for a specific element to load, like this:
_app.WaitForElement(c => c.Marked("Login"), "Time out expired", TimeSpan.FromSeconds(15));
var result = _app.Query(c => c.Marked("Login"));
Assert.AreEqual(1,result.Length);
_app.Screenshot("Test passed with success");
Here is some more information about WaitTime and WaitForElement that could be helpful.

Calling Mono exe from C does not find libc

In Ubuntu, I am calling a C# executable from C using Mono (v3.2.8) and the embedded Mono runtime. When I call the exe (.NET 4.5) from the command line (ie, mono testFile.exe), it works fine. However, when I run my C test program, it throws a C# exception:
libc at at (wrapper managed-to-native) System.Platform:uname (intptr)
at System.Platform.get_IsMacOS () [0x00000] in <filename unknown>:0
at System.Net.WebRequest.GetSystemWebProxy () [0x00000] in <filename unknown>:0
at System.Net.WebRequest.GetDefaultWebProxy () [0x00000] in <filename unknown>:0
at System.Net.WebRequest.get_DefaultWebProxy () [0x00000] in <filename unknown>:0
at System.Net.GlobalProxySelection.get_Select () [0x00000] in <filename unknown>:0
at System.Net.HttpWebRequest..ctor (System.Uri uri) [0x00000] in <filename unknown>:0
at (wrapper remoting-invoke-with-check) System.Net.HttpWebRequest:.ctor (System.Uri)
at System.Net.HttpRequestCreator.Create (System.Uri uri) [0x00000] in <filename unknown>:0
at System.Net.WebRequest.Create (System.Uri requestUri) [0x00000] in <filename unknown>:0
at System.Net.WebRequest.Create (System.String requestUriString) [0x00000] in <filename unknown>:0
at MyClass.MainClass.Main (System.String[] args) [0x00000] in <filename unknown>:0
I've narrowed it down to this one line of code:
WebRequest request = WebRequest.Create("http://www.google.com");
Looking through the call stack and the mono source code, I believe the failure is associated with the calling of the native 'uname' function in libc.so (the CheckOS() function, line 50 of mcs/class/System/System/Platform.cs):
if (uname (buf) == 0) {
I think what is happening is that the p/Invoke layer cannot locate libc.so. However, when I make the same call in my executable's Main() function, it executes fine, I am confused why it works in one place but not the other. It is also strange that the exception message is not a DllNotFoundException, but rather this generic "libc" message (though I have confirmed that I get the same message when I try to p/Invoke with a bogus .so).
My C code:
int main(int argc,const char* argv[]) {
MonoDomain* domain=mono_jit_init("testFile.exe");
MonoAssembly* assembly=mono_domain_assembly_open(domain,"testFile.exe");
MonoImage* image=mono_assembly_get_image(assembly);
const char* args[1];
args[0]="testFile.exe";
mono_jit_exec(domain,assembly,1,(char**) args);
}
My C# code:
namespace MyClass {
class MainClass {
public static void Main (string[] args) {
WebRequest request=WebRequest.Create("http://www.google.com");
}
}
}
gcc compile options are:
gcc cTest.c -I/usr/include/mono-2.0 -DREENTRANT -lmono-2.0 -lm -lrt -ldl -lpthread
mono compile options are:
dmcs -out:testFile.exe -platform:anycpu -sdk:4.5 -target:exe -unsafe+ -main:MyClass.MainClass -reference:System,System.Configuration,System.Data,System.ServiceModel,System.Web,System.Xml *.cs
Update:
I used MONO_LOG_LEVEL and MONO_LOG_MASK to trace the .so search sequence and found that the sequence on the successful call was entirely different from the unsuccessful one. So it is searching, just not very well. I then copied my libc.so.6 to the current directory, renamed to libc.so, and then set LD_LIBRARY_PATH to the same location. This gave me success. I am now having my Linux guru look into what can be done to make this solution more 'correct', but at least I have a running program. This may be the same problem as mine (though the solution's not working for me).
The problem is you are missing the dll mapping (mono_config_parse). The following will work with mono 3.x and 4.x embedding and avoid your libc error.
#include <mono/jit/jit.h>
#include <mono/metadata/environment.h>
#include <stdlib.h>
int
main(int argc, char* argv[]) {
MonoDomain *domain;
const char *file;
int retval;
mono_config_parse (NULL);
domain = mono_jit_init ("textFile.exe");
MonoAssembly *assembly;
assembly = mono_domain_assembly_open (domain, "testFile.exe");
mono_jit_exec (domain, assembly, argc, argv);
retval = mono_environment_exitcode_get ();
mono_jit_cleanup (domain);
return retval;
}
Certain features of the runtime like Dll remapping depend on a configuration file, to load the configuration file, just add:
mono_config_parse (NULL);
Which will load the Mono configuration file (typically /etc/mono/config).
http://www.mono-project.com/docs/advanced/embedding
FYI: On Ubuntu 15.04, I am using:
gcc main.c `pkg-config --cflags --libs mono-2`
You can update that of course to grab the mono-sgen vs. the boehm jit.
On OS-X:
gcc main.c -m32 -framework Foundation -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk \
-lmonosgen-2.0 \
-I/Library/Frameworks/Mono.framework/Headers/mono-2.0 \
-L/Library/Frameworks/Mono.framework/Libraries
I've run into this issue as well. What I noticed is that the mkbundle output lists the assemblies which it embeds, and that the System.Net.dll was not included. After adding it manually on the mkbundle command line, it all worked fine.
The command line I'm using now:
mkbundle my.exe --deps --keeptemp --static --config /etc/mono/configlibc --machine-config /etc/mono/4.5/machine.config System.Net.dll -o bssetup.exe
The configlibc file is a modified copy of the default config file in that directory. The modifications were to remove all mapping lines, except the one for libc.
Hope it helps anyone!
Based on your update, it looks like the application is searching for libc.so instead of libc.so.6. You got it working by manually pointing your LD_LIBRARY_PATH to the current folder having the libc.so that you copied.
Suggestion: ask your Linux guru to symlink libc.so to libc.so.6 in your normal search paths for your application to work.

Error with Unity iOS compile: Cross Compilation job Mono.WebBrowser.dll failed

have been working on a project intended for iOS deployment. Until recently, we have been building and deploying to our client via webplayer. However, I am now attempting to shift to releasing builds on iOS . But, no matter what I try, when I go to compile the project I receive the following error messages:
Cross compilation job Mono.WebBrowser.dll failed.
UnityEngine.UnityException: Failed AOT cross compiler: /Applications/Unity_45/Unity.app/Contents/PlaybackEngines/iOSSupport/Tools/OSX/mono-xcompiler --aot=full,asmonly,nodebug,static,outfile="Mono.WebBrowser.dll.s" "Mono.WebBrowser.dll" current dir : /Users/admin/Desktop/UI_gg_current/Temp/StagingArea/Data/Managed
Env: Apple_PubSub_Socket_Render = '/tmp/launch-7SV8Ex/Render'
LOGNAME = 'admin'
PATH = '/usr/bin:/bin:/usr/sbin:/sbin'
TMPDIR = '/var/folders/7c/s32nkpmx0yvgw4mmw_5vhxx40000gn/T/'
MONO_PATH = '/Users/admin/Desktop/UI_gg_current/Temp/StagingArea/Data/Managed'
SSH_AUTH_SOCK = '/tmp/launch-wpdtRI/Listeners'
USER = 'admin'
GC_DONT_GC = 'yes please'
Apple_Ubiquity_Message = '/tmp/launch-cfnoHv/Apple_Ubiquity_Message'
SHELL = '/bin/bash'
__CF_USER_TEXT_ENCODING = '0x1F5:0:0'
GAC_PATH = '/Users/admin/Desktop/UI_gg_current/Temp/StagingArea/Data/Managed'
HOME = '/Users/admin'
COMMAND_MODE = 'unix2003'
result file exists: False. Timed out: False
stdout:
stderr:
at UnityEditor.MonoProcessUtility.RunMonoProcess (System.Diagnostics.Process process, System.String name, System.String resultingFile) [0x00000] in <filename unknown>:0
at UnityEditor.MonoCrossCompile.CrossCompileAOT (BuildTarget target, System.String crossCompilerAbsolutePath, System.String assembliesAbsoluteDirectory, CrossCompileOptions crossCompileOptions, System.String input, System.String output, System.String additionalOptions) [0x00000] in <filename unknown>:0
at UnityEditor.MonoCrossCompile+JobCompileAOT.ThreadPoolCallback (System.Object threadContext) [0x00000] in <filename unknown>:0
UnityEditor.HostView:OnGUI()
and
Error building Player: UnityException: Cross compilation failed.
I am using Unity 4.5. To date I have : deleted third party dlls (including xml.linq.dll) , removed any instance of Lambda search operators (=>), and deleted the temp folder because I have seen these approaches used in similar situations (I know some aspects of Linq are not supported in iOS cross compile).
I have looked at similar issues such as this one: http://answers.unity3d.com/questions/439367/cross-compilation-failed-csharpdll.html. But, I am so perplexed, because it isn't the CSharp assembly causing my problem (which means it isn't one of my scripts?) I am not sure why it would even be including a WebBrowser.dll for an iOS build. Any help is greatly appreciated, as I feel I have searched far and wide for a resolution with no luck.
See the resolution that for this question here.

System.EntryPointNotFoundException CreateActCtx error's

I'm trying to make an C# program in mono, so i can port it to Windows, Linux and Mac very easy.
But I've got this error:
System.EntryPointNotFoundException has been thrown
CreateActCtx
System.EntryPointNotFoundException: CreateActCtx
at (wrapper managed-to-native) WebKit.NativeMethods:CreateActCtx (WebKit.NativeMethods/ACTCTX&)
at WebKit.ActivationContext.Initialize () [0x00000] in <filename unknown>:0
at WebKit.WebKitBrowser..ctor () [0x00000] in <filename unknown>:0
at (wrapper remoting-invoke-with-check) WebKit.WebKitBrowser:.ctor ()
at TW_Overview.globalVars..cctor () [0x00000] in <filename unknown>:0
Here is some code:
public static void Main (string[] args)
{
Application.Init ();
MainWindow win = new MainWindow ();
startUp();
win.Show ();
Application.Run ();
}
public static globalFunc globalfunctions = new globalFunc();
public static void startUp ()
{
while (!globalfunctions.isLoggedIn()) {
globalfunctions.showLogin();
}
}
And here's the globalfunc (part of it)
public Boolean isLoggedIn()
{
if (globalVars.isLoggedIn == true)
{
return true;
}
return false;
}
The line that give's the error is:
while (!globalfunctions.isLoggedIn()) {
I've gotten this type of approach in C# Windows Visual Studio, and there it worked. So i don't understand why it isn't working.
Hope that you guys have an clue about what the problem is...
EDIT 1
I've downloaded the latest version of webkit.net link, unpacked it and put all the dllÅ› and folders in the debug folder of my program. I also added an refrence to the dll in the debug folder.
And i've added everywhere this line:
using WebKit;
So i don't know what the problem is. mayby something with static and not static??? i'm not that good at that part...
EDIT 2
The problem is that this isn't supported bij Mono.
After some searching and looking if it's possible to port the webkit to mono, i came across an site that already did that for us.
https://live.gnome.org/WebKitGtk
I cant test it right now, but i think it should work. If not, then i will incontinent searching and update here if i find the solution.

Categories