我尝试在gallio-users列表中询问此问题,但问题未能出现(Google Groups称帖子成功).我想这个列表可能会被那些不经常阅读他的电子邮件的人主持:-)看到SO有Gallio和MbUnit的标签,我认为这里值得一提.
我看到MbUnit头版提到他们热衷于维护Mono兼容性.还有一个> 1年的关于gallio用户的帖子说它在Linux下不起作用
如果删除Parallelizable属性,我想测试的项目在Mono下编译得很好.我可以Gallio在Linux下启动控制面板,但不能启动Icarus或Echo.
有没有办法MbUnit在Linux下运行测试?使用命令行(如Gallio.Echo)并且不需要Monodevelop的东西会特别有用.
我有以下方法:
namespace ListHelper
{
public class ListHelper<T>
{
public static bool ContainsAllItems(List<T> a, List<T> b)
{
return b.TrueForAll(delegate(T t)
{
return a.Contains(t);
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
其目的是确定List是否包含另一个列表的所有元素.在我看来,这样的东西已经内置到.NET中,就是这样,我是否复制了功能?
编辑:我很抱歉没有说明我在Mono版本2.4.2上使用此代码.
Travis CI持续集成服务正式支持多种语言,但不支持C#或F#.
我可以在我的.net项目中使用它吗?
对于具有Java背景的开发人员,我也有兴趣使用ASP.NET工具/平台来探索软件开发.
Java Web应用程序(.jsp和servlet)可以在许多服务器平台上运行.
问题:.NET Web应用程序是否能够在基于Linux的服务器上运行?考虑到无法使用Windows服务器托管Web应用程序的情况.
我已经看过很多关于在Raspberry Pi上运行Mono/.NET代码的讨论.在Raspberry Pi上实际运行任何Mono代码是否有任何成功?
在他们的网站上,他们列出了几个在该设备上运行的Linux发行版,其中一些发行版包括Mono.但是,没有详细说明Mono是否适用它.
有工作实施吗?
我正在尝试使用自己的布局创建一个DialogFragment.
我见过几种不同的方法.有时布局在OnCreateDialog中设置如下:(我正在使用Mono,但我已经习惯了Java)
public override Android.App.Dialog OnCreateDialog (Bundle savedInstanceState)
{
base.OnCreateDialog(savedInstanceState);
AlertDialog.Builder b = new AlertDialog.Builder(Activity);
//blah blah blah
LayoutInflater i = Activity.LayoutInflater;
b.SetView(i.Inflate(Resource.Layout.frag_SelectCase, null));
return b.Create();
}
Run Code Online (Sandbox Code Playgroud)
第一种方法对我有用......直到我想findViewByID.
在谷歌搜索后使用,我尝试了第二种方法,涉及覆盖OnCreateView
所以我注释掉了两行OnCreateDialog设置布局然后添加了这个:
public override Android.Views.View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View v = inflater.Inflate(Resource.Layout.frag_SelectCase, container, false);
//should be able to use FindViewByID here...
return v;
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个可爱的错误:
11-05 22:00:05.381: E/AndroidRuntime(342): FATAL EXCEPTION: main
11-05 22:00:05.381: E/AndroidRuntime(342): android.util.AndroidRuntimeException: requestFeature() must be called before adding content
Run Code Online (Sandbox Code Playgroud)
我很难过.
是否可以使用具有相同代码库的Xamarin开发和构建Linux应用程序?
使用Ubuntu几年后,我的主操作系统现在又是Windows.但这并非不可能,我可以切换到Mac.
Rigth现在我对Qt有一点经验,没有Xamarin的经验.使用Qt,您可以在Windows,Linux和Mac以及Windows,Linux,Mac,iOS,Android,Windows Mobile等开发......他们非常清楚这一点.由于Xamarin现在是免费和开源的,我仍然没有Qt的经验,我正在考虑尝试Xamarin进行跨平台开发而不是Qt.
无法发布我的Linux软件对我来说是一个破坏者.能够在Linux下开发会很好,但是可选的.但在我的所有Google研究之后,我只能找到信息和人们要求支持在Linux下开发而不是Linux.
据我所知,单独使用Mono不应该是一个问题.但据我所知,Xamarin> Mono并且我没有得到Mono中的所有内容我可以进入Xamarin.我也不确定未来Mono的支持程度如何.对我来说,看起来Xamarin对于微软而言比Mono本身更为重要.我不确定它是否可能,因为Xamarin基于Mono,但是有可能,微软在某种程度上决定不支持Mono与.NET的兼容性与Xamarin一样,甚至完全取消单声道Mono吗?
所以我正在寻找一个可以依赖的所有桌面和移动平台的单一框架,我想知道在我深入任何一个之前,Xamarin和/或Mono和/或Xamarin + Mono是否可以替代Qt那两个解决方案.
我见过他们中有一些. opencvdotnet,SharperCV,EmguCV,One on Code Project.
有没有人有这些经验?我在Code Project上玩了一下,但是当我尝试做任何复杂的事情时,我得到了一些讨厌的无法捕获的异常(即Msgbox异常).跨平台(支持Mono)将是最好的.
这里的很多人可能都熟悉Joel Spolsky最受欢迎的博客文章之一,请主席先生,我可以有一个链接器,在那里他呼吁一种方法来删除.NET框架的依赖关系,这样就可以开发一个独立的应用程序,出售.
Visual Studio开发团队的Jason Zander当时回答了他对这个主题的看法,认为这个话题有点没有意义 - 在运行时(以及其他方面)修复安全问题的能力是他们的主要关注点.总的来说,小开销是值得的.
快进到2009年.现在有几个团体声称拥有C#链接器.(Jason Zander甚至自己说实现它不会花太多时间.)我们现在拥有一个庞大的200-300 mb跨平台完整的.NET 3.5安装程序,而不是可爱的,十几个下载的.NET 1.0.包含用于x86,x64和ia64的.NET版本.微软建议减少运行时间大小包括:
更糟糕的是,正如我所理解的那样(如果我错了请纠正我)客户端配置文件甚至没有注册Windows,因为安装了.NET 3.5.这意味着如果计算机上安装了多个.NET 3.5客户端应用程序,则没有人会看到对方,并且将一次又一次地重新安装运行时!
我真的不知道微软在想什么.即使假设最坏的情况安装将是针对一个目标平台(例如,x64)并且仅需要包括那些库,您仍然在应用程序上查看超过60 MB的开销.即使是最着名的.NET应用程序之一,Paint.NET,由于存在大量的.NET依赖性,因此很难安装应用程序. 如果他们在分发免费应用程序时遇到问题,那么世界其他地方呢?最后,他们必须制作一个安装Microsoft Installer 3.1,.NET运行时引导程序以及所有其他依赖库的引导程序,然后才能安装自己的应用程序.
那怎么样呢.链接器.是否存在任何好的 - 或者只是简单地构建C#应用程序而不需要用户安装大量.NET运行时的工具?
更新:所以,看起来有几个选项:
单声道:
.净:
看起来Mono工具正在使用; 基于.NET的工具怎么样?与他们有任何其他经验,或者我们只是要等待微软将其推向每个人?我不禁想到将.NET 4.0推出需要多长时间......
我有一个变量,我用来表示状态.它可以从多个线程读取和写入.
我正在使用Interlocked.Exchange并Interlocked.CompareExchange改变它.但是我从多个线程中读取它.
我知道volatile可以用来确保变量不在本地缓存,但总是直接从内存中读取.
但是,如果我将变量设置为volatile,则会生成有关使用volatile并使用ref传递给Interlocked方法的警告.
我想确保每个线程都读取变量的最新值而不是某些缓存版本,但我不能使用volatile.
有一个Interlocked.Read 但是它适用于64位类型,并且在紧凑的框架上不可用.它的文档说32位类型不需要它,因为它们已经在一次操作中执行.
如果您使用Interlocked方法进行所有访问,则互联网上有一些声明您不需要使用volatile.但是,您无法使用Interlocked方法读取32位变量,因此您无法使用Interlocked方法进行所有访问.
有没有办法在不使用锁的情况下完成我的变量的线程安全读写?