本页介绍了四种不同的单声道编译器--mcs/gmcs/smcs/dmcs.
对我来说,有四个C#编译器有点奇怪.通常,较新版本的编译器保持向后兼容性.
我认为这是因为运行时支持问题,但Microsoft的C#有一个支持所有运行时版本的csc.exe.
所以我有一个C#应用程序.它有一些链接到它的资产,并且在编译期间被嵌入.应用程序在Windows上编译和运行完美.当用mono测试兼容性时,告诉所有内容都是正确的.如果我尝试编译给出一个错误的n xml文件
/home/rupert/Desktop/CloudObserverLite(4)/CloudObserverLite/Properties/Resources.resx: Error: Error: Invalid ResX input.
Position: Line 123, Column 5.
Inner exception: value
(CloudObserverLite)
Run Code Online (Sandbox Code Playgroud)
如果我们看看resx xml
...<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="framework_4_5_0_17689_swz" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>../assets/framework_4.5.0.17689.swz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="index_html" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>../assets/index.html;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;windows-1251</value>
</data>...
Run Code Online (Sandbox Code Playgroud)
第123行将是第一个 </data>标记.
这是所有resx文件,如果它可以提供更多信息
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML …Run Code Online (Sandbox Code Playgroud) Jasper Reports是Crystal Reports的绝佳开源替代品.它非常适用于单页PDF页面,例如多页报告的字母和发票.然而,它不是非常友好的.NET,并且让C#/ Mono与JasperServer玩得很好并不富有成效.
有没有人从C#获得有关如何在JasperServer上运行报告的代码示例,并附加带有SOAP请求的XML数据集?它需要在Mono上运行,因此Microsoft.Web.Services2是不可能的.
我试图推出自己的肥皂请求.Jasper Server似乎接受了它,但我似乎无法得到任何响应,而不是服务器500错误.我没有附加一个MTOM附件.
var sb = new StringBuilder();
sb.AppendLine("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">");
sb.AppendLine("<s:Body s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">");
sb.AppendLine("<q1:runReport xmlns:q1=\"http://axis2.ws.jasperserver.jaspersoft.com\">");
sb.AppendLine("<requestXmlString xsi:type=\"xsd:string\">");
sb.AppendLine("<request operationName=\"runReport\" locale=\"en\">");
sb.AppendLine(" <argument name=\"RUN_OUTPUT_FORMAT\">PDF</argument>");
sb.AppendFormat(" <resourceDescriptor name=\"\" wsType=\"\" uriString=\"{0}\" isNew=\"false\">", "/JourneyReport");
sb.AppendLine(" <label>null</label>");
sb.AppendLine(" <parameter name=\"testparam\">1</parameter>");
sb.AppendLine(" </resourceDescriptor>");
sb.AppendLine(" </request>");
sb.AppendLine("</requestXmlString>");
sb.AppendLine("</q1:runReport>");
sb.AppendLine("</s:Body></s:Envelope>");
var webRequest = (HttpWebRequest)WebRequest.Create("http://localhost:8080/jasperserver/services/repository");
webRequest.Credentials = new NetworkCredential("jasperadmin","jasperadmin");
webRequest.PreAuthenticate = true;
webRequest.Headers.Add("SOAPAction","");
//Set HttpWebRequest properties
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(sb.ToString());
webRequest.Method = "POST";
webRequest.ContentLength = bytes.Length;
webRequest.ContentType = "text/xml; encoding='utf-8'";
//Get Stream object
var …Run Code Online (Sandbox Code Playgroud) 以编程方式确定Mono运行时版本的推荐方法是什么?
当我们的.Net应用程序与旧版本的Mono一起使用时,我们遇到了各种问题.有时我们可以解决这些问题,如果我们知道我们正在处理哪个版本,但有时我们不能.
我们的解决方案是以编程方式检测Mono版本,然后我们可以透明地应用变通方法.如果Mono版本太旧,那么我们会提示用户升级.
我们可以发现Mono是我们的运行时,有这样的东西:
bool isMonoRuntime = Type.GetType("Mono.Runtime") != null;
Run Code Online (Sandbox Code Playgroud)
我们怎样才能可靠地确定单声道版本而不间接推断它?需要说明的是,我们需要Mono版本号,而不是.Net CLR版本号.
我目前正在开发一个C#项目,它是一个控制台应用程序,其中包含一个WCF soap服务.
下面是我用来打开主机的代码.
var baseAddress = new Uri(Configuration.soapServerSettings.soapServerUrl);
var host = new ServiceHost(typeof(SoapServer), baseAddress);
BasicHttpBinding basicHttpBinding = new BasicHttpBinding();
var meta = new ServiceMetadataBehavior()
{
HttpGetEnabled = true,
HttpGetUrl = new Uri("", UriKind.Relative)
};
host.Description.Behaviors.Add(meta);
var debugBehaviour = new ServiceDebugBehavior()
{
HttpHelpPageEnabled = true,
HttpHelpPageUrl = new Uri("", UriKind.Relative),
IncludeExceptionDetailInFaults = true
};
ServiceEndpoint endpnt = host.AddServiceEndpoint(
typeof(ISoapInterface),
basicHttpBinding,
"EmailServer");
host.Description.Behaviors.Remove(typeof(ServiceDebugBehavior));
host.Description.Behaviors.Add(debugBehaviour);
host.Open();
Run Code Online (Sandbox Code Playgroud)
这在Windows上完全正常,但在Linux上,当我浏览到它时,我收到以下消息:
XmlSchema错误:命名项 http://schemas.microsoft.com/2003/10/Serialization/:anyType已包含在架构对象表中.考虑将MONO_STRICT_MS_COMPLIANT设置为"是"以模仿MS实现.相关架构项SourceUri:,第3行,第3位.
我不知道从哪里开始研究这个问题.
感谢您的任何帮助,您可以提供
更新:
根据Rob Goodwins的建议,我添加了MONO_STRICT_MS_COMPLIANT环境变量,它看起来确实有效,我可以访问该服务.但是,我现在遇到了另一个问题.我有一个PHP页面,它每隔几秒就会发出几个请求,但过了一分钟后,我的应用程序崩溃了.
我得到以下异常:
此XmlWriter在此状态下不接受StartTag错误.在System.Xml.XmlTextWriter.WriteStartElement(System.String前缀,System.String localName,System.String namespaceUri)[0x00000] in:0 at …
default在DLL项目中使用关键字时,我遇到了一个非常奇怪的问题.在我的DLL项目(使用VS2013编译)中,我有以下类:
public class BaseClass<T>
{
public T value;
public bool enabled;
public BaseClass ( T value = default(T), bool enabled = true )
{
this.value = value;
this.enabled = enabled;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我在DLL项目中使用它,它可以很好地工作.我可以创建从这个基类派生的类而不会出现问题.但是,只要我尝试在另一个项目中使用DLL(使用Mono 2.0.0编译),从基类派生值类型会导致编译器错误.这个:
public class ChildClass : BaseClass<int>
{
}
Run Code Online (Sandbox Code Playgroud)
导致这个:
Assets/ChildClass.cs(8,14):错误CS1502:BaseClass <int> .BaseClass(int,bool)'的最佳重载方法匹配有一些无效的参数
Assets/ChildClass.cs(8,14):错误CS1503:参数
#1' cannot convertnull'表达式为'int'类型
但是,具有值类型的基类可以在没有问题的字段中使用:
public class OtherClass
{
public BaseClass<int> baseInt;
}
Run Code Online (Sandbox Code Playgroud)
我使用ILSpy查看了DLL并注意到了这一点:
public class BaseClass<T>
{
public T value;
public bool enabled;
public BaseClass(T value = null, bool enabled = true) …Run Code Online (Sandbox Code Playgroud) 有人可以帮助/指导我在Linux(MONO)和Windows(.NET)上使用SQLite lib
在linux上我使用原生单声道sqlite客户端,在Windows上我使用http://sqlite.phxsoftware.com/
有没有办法定义这样的'使用'指令:
#if (linux)
using Mono.Data.Sqlite;
#else
using System.Data.SQLite;
Run Code Online (Sandbox Code Playgroud)
另一个问题是两种实现上的差异很小,例如:
cmd = new SqliteCommand(); // mono
cmd = new SQLiteCommand(); // sqlite.phxsoftware.com
Run Code Online (Sandbox Code Playgroud)
等待任何帮助
如果您知道更好或更简单的方法,那么非常感谢信息.
谢谢
我正在尝试设置Visual Studio代码(https://code.visualstudio.com/docs/debugging)来调试win8上的c#/ mono.我还安装了最新版的mono.
我在launch.json中添加了一个配置,并将'type'更改为mono(也尝试在调试exe中指向'program'),但我得到错误:
initialize:无法为适配器ID"mono"创建调试会话
你如何在ac #project上设置调试?
编辑:似乎可能需要一个gulp脚本?在Ubuntu上使用VSCode编译C#项目
我试图在GTK中使用图像按钮#(Xamarin Studio).我将图像设置为按钮,在UI Builder中,图像即将出现.

但是当我运行程序时,按钮中没有图像

我在不同版本的IDE和不同平台(Mac和Windows)上试过这个
请帮忙
更新:MainWindow.cs
using System;
using Gtk;
public partial class MainWindow: Gtk.Window
{
public MainWindow () : base (Gtk.WindowType.Toplevel)
{
Build ();
}
protected void OnDeleteEvent (object sender, DeleteEventArgs a)
{
Application.Quit ();
a.RetVal = true;
}
}
Run Code Online (Sandbox Code Playgroud)
在gtk-gui文件夹中,我可以找到这些文件
generated.cs
// This file has been generated by the GUI designer. Do not modify.
namespace Stetic
{
internal class Gui
{
private static bool initialized;
internal static void Initialize (Gtk.Widget iconRenderer)
{
if ((Stetic.Gui.initialized == …Run Code Online (Sandbox Code Playgroud) mono ×10
c# ×8
.net ×3
default ×1
gtk ×1
gtk# ×1
jasperserver ×1
orm ×1
powershell ×1
resources ×1
self-hosting ×1
soap ×1
sqlite ×1
wcf ×1
xamarin ×1