Create XAP, APPX with Mono - c#

I want to use a service that provides CI for Windows Phone/Store/Universal/UAP apps. For this I'm considering Codeship as they provide a free plan to get me started. However, they don't support such types of apps yet. Asking their support they asked me whether Mono as compiler would be enough.
Is Mono enough to create a XAP/APPX package? Maybe I can compile the code and afterwards package the XAP/APPX?
My assumption is that Mono isn't enough to create those packages. If that's right, what's missing there?

To have mobile CI server that can build for Windows Phone, Windows Apps (the new name for Universal Apps ;)) et. al. you will have to install Visual Studio on the build server/agent. So no Mono will not be enough and MS Build alone will also not cut it.
If you are thinking about using Team Services as a build server, you will need a VM on which you will have to install Visual Studio to enable the required builds, but if you have a MSDN subscription this would potentially be a free option for you.
If you want to build for Android with Xamarin you will have to further install the Xamarin Toolchain (and have a license ready to use). For iOS you would even need a Mac in the build chain, but I assume you are only focusing on the Windows stack right?

Related

Getting started with C# on OS X

I'd like to create a few simple C# applications and command line utilities to learn more about C#, affordably. Initially, I tried using Microsoft's free Studio Express in a Windows 8 virtual machine; however, it quickly reported that it could only create apps for the Microsoft app store and failed to build the simplest examples of an XML file transformer.
I also found Mono or rather MonoDevelop. I'm still reading about it. It seems that the SDK is entangled with the MonoDevelop IDE, and the MonoDevelop installer is actually the Xamarin Studio installer. Xamarin is a subscription based IDE and inexpensive versions of it appear to be constrained. Perhaps I need to continue studying; however, I thought I'd ask if anyone has experience getting started with C# on OS X.
Ideally, I'd like the simplest setup. I prefer using command line compilers, simple code editors, and build scripts. Are there Windows and OS X command line compilers for C# applications? Are there framework libraries that can easily be included that work on both OS X and Windows?
First, Mono is not an SDK, but a runtime. The specific point of Mono is to be able to, for the most part, run the same IL on other platforms as what runs on .NET for Windows. This means that, barring the slight hiccups in implementation, you could copy a program, run it via "mono program.exe" (via the console) on OS X, and get the same output (I have tested this with Console applications, at least - UI starts to get a little hairier).
In terms of library, the Mono libraries try to mirror the .NET ones so exactly, that the code you write for one is almost completely compatible with the other.
"MonoDevelop" and "Xamarin Studio" are the same thing, simply having applied a name change after a certain version. They are the most well known tools for building in the .NET language family on a non-Windows system (the only tools I even know of), and tend to mirror the shortcuts of Visual Studio well (at least on windows.) Unlike Mono itself, these are an IDE, and do not constrain you any more than VS constrains you into .NET.
The constraints you'll find with free Xamarin apply mostly to their mobile platforms (iOS, Android) and do not affect working with desktop (ie Windows and OS X) applications.
I've settled on using a Windows 8 virtual machine and Visual Studio Express for Windows Desktop as Dan J recommended. For usage similar to mine, simple desktop and command line apps, be careful not to select and install the "V.S.E. for Windows" version.

Is it possible to develop applications on Windows using MonoTouch/Xamarin?

I know I need a mac to deploy but can I at least use my PC to develop the application? It would really help me a lot if I can develop on Windows where I can focus on writing the app.
This answer covers only Xamarin 2.0. Unfortunately I don't know MonoTouch.
Take a look at this statement about Xamarin 2.0:
Xamarin 2.0 bundles the company's Android, iOS and Mac development
tools in a single affordable package aimed at all tiers of developers.
The free Starter edition includes the Xamarin Studio IDE enables
developers to create Android, iOS and Mac apps using C#. However, the
free edition doesn't allow developers to exceed 32k of compiled IL
code and it cannot import or call upon any third-party libraries. The
$299 Indie edition removes this restriction. Things start getting
really interesting for .NET developers with Xamarin Studio's $999
Business edition. This version adds the ability to code iOS
applications within Visual Studio. Yes, you read correctly — code
iOS applications in Visual Studio! Granted, you still need a Mac to
compile and deploy the application to iOS devices (more on that
later), but the fact that you can use a familiar IDE to develop iOS
applications is a game changer.
To make it short: Yes you will need a mac to deploy your application and
yes you can develop on windows using Visual Studio.
Source: http://www.drdobbs.com/tools/xamarin-20-review/240150634
No you don't need the 1 k version to compile on windows. When you want to deploy your app you need to buy it! If u are making a app for windows 8 or whatever you dont need to pay. Monogame is a open source project. For the deployment to the phones your paying to the xamarin project.
"This means that your Xamarin iOS for Visual Studio installation requires a networked Mac OS-X computer to perform these tasks for you. Once configured, Xamarin’s tools will make the process as seamless as possible, but the fact remains that a Mac is required in addition to the Windows computer running Visual Studio."
So still need to hook up my mac and perform all the installations and configurations. Will take time but not a deal breaker I guess.
It is possible to use cloud build services for such a task. One such service worth giving a try is http://ship.io - they offer a free plan to get started.

Is there any way to develop Silverlight applications on OS X?

While all of my machines are Macs, I actually really enjoy working in .NET. I thought it would be fun to try my hand at writing a Silverlight application. Unfortunately, as near as I can tell, Silverlight is not a part of Mono that actually works on OS X.
Is it possible to develop Silverlight on OS X, or will I need to use a VM? If it's possible, is Mono the only option, or is there some other way?
Have you heard of Moonlight?
Taken from the project page:
Moonlight is an open source
implementation of Silverlight
(http://silverlight.net), primarily
for Linux and other Unix/X11 based
operating systems. In September of
2007, Microsoft and Novell announced a
technical collaboration that includes
access to Microsoft's test suites for
Silverlight and the distribution of a
Media Pack for Linux users that will
contain licensed media codecs for
video and audio.
According to go-mono.com, you can use MonoDevelop to develop for Silverlight/Moonlight on Mac OS X.
I'd probably stick with a VM - I use VM's on my mac all the time, and Visual Studio is perfectly usable (obviously that does depend on your mac's spec)...
If you want it all for free, you can use VirtualBox, install windows on there (you can always use an evaluation if you don't own it), and then use Visual Studio Express - this SO question tells you how to set Visual Studio Express up for SL dev... Developing Silverlight in Visual Studio Express?
There was a Silverlight development tool that ran in Eclipse called Eclipse tools for Silverlight. It has a Mac version. It looks a bit stagnant though, so I don't know it's current status.
http://www.eclipse4sl.org/
MonoDevelop does have moonlight projects built-in, so there shouldn't be any issue.
Also- while this prob doesn't fit your case, I bootcamped my MBP and while it's freaky running Win7 + vStudio on mac hardware, it works quite well.
Silverlight is comptatible for MAC OSX via a separate project, whose name I forget. Microsoft release the source code for silverlight to some people that are working on implementing on other platforms, including MAC
However, this means that it's always at least one version late, so MAC users can have access to silverlight 3, but not 4.
Old Mac that are not intel processors, only have access to silverlight 1.
Look at this page for a compatiblity list.
http://en.wikipedia.org/wiki/Silverlight#Silverlight_4

Differences in development between .NET and Mono

I'm looking into Mono and .NET C# and we'll be needing to run the code on Linux Servers in the future when the project is developed. At this point I've been looking at ASP.NET MVC and Mono.
I run an Ubuntu distro and want to do development for a web application, some of the other developers use Windows and run other .NET items with Visual Studio.
What does Mono not provide that Visual Studio does?
If running this on Linux later shouldn't we use MonoDevelop?
Are there some third party tools or add-ins that might be an issue with Mono later?
What does Mono not provide that Visual Studio does?
MonoDevelop is presumably what you mean here. MonoDevelop offers cross platform development on Linux, Mac OS X, Windows based on GTK. However it is not as polished as Visual Studio for obvious reasons - it's 3 people making it, not hundreds. It has some nice features, especially its source control plugin architecture. However as Visual Studio Express is free there aren't many advantages on Windows to using it.
It uses the same .csproj and .sln format as Visual Studio, however the XML docs format is different.
If running this on Linux later shouldn't we use MonoDevelop ?
As I mentioned above, the project formats are inter-operable.
Are there some third party tools or add-ins that might be an issue with Mono later?
Unlike Visual Studio, there aren't a huge wealth of add-ins for Monodevelop. The ones that you use in Monodevelop won't effect your .csproj files at all, as anything Visual Studio cannot read it generally ignores.
As people have said don't confuse Mono for MonoDevelop. MonoDevelop is an IDE for Mono that originally came from (forked) SharpDevelop.
Mono is the cross platform framework that 'apes' the Microsoft CLR and framework libraries.
I don't have much experience in this area but...
The Mono Project Roadmap has an overview of features that are new, upcoming, and not present in Mono compared to MS.NET. Even where Mono has the same classes as .NET, note that compatibility is not 100% (although that is generally their goal). I'm not sure if there exists a comprehensive list of things missing in Mono.
MonoDevelop is now available on both Windows and Linux so you're probably best off using it. However, MonoDevelop does appear to use the same project file format as Visual Studio and SharpDevelop, so you could make an attempt at mixing IDEs.
Of course, when using 3rd-party .NET libraries, note that many of them have not been tested with mono, and in particular anything that uses P/Invoke will not work on Mono for Linux. However, most incompatibilities with mono are minor, and if you stick with open-source libraries you can always fix any incompatibilities you run into.
You might also take a look at Mono Tools for Visual Studio. It lets your visual studio developers target and test with the mono platform.
You're aiming to always have support, and/or primarily use the software on Linux, correct? This is actually a question I asked the Mono developers at a conference a little while back, and it basically boiled down to what you want to do with it.
If you want it to always work on Linux, then use Mono. If you only care about Windows, then use Visual Studio.
If you're using Mono, then use MonoDevelop across all developers. It'll just make life a lot easier later on, and it'll make sure that whatever you write in the one will work for everyone.
Unfortunately, I do not know the answer to the exact limits/advantages of Mono vs. .NET, aside from .NET being further ahead, and Mono playing catch-up, nor about different addons.
If none of your developers need to develop on Mono for certain features, I suggest you all use Visual Studio on Windows. Then test the applications on Mono via
Mono Tools for Visual Studio
manually copy the binaries over
check out the code on Linux and build in MonoDevelop.
Personally I experienced a lot of small troubles when I tried out the third way, but luckily I am capable of finding workarounds.
It is only when you touch Mono, you know which part of your application needs to be tuned.
http://www.mono-project.com/Start
If you can help it, it'd recommend avoiding the Mono implementation of Remoting. There seem to be some unexpected hiccups and debugging it is not straight-forward.
We had a very Remoting heavy product that we tried to port to Mono so we could support Linux. Due to being unable to resolve the Remoting issues, we eventually had to abandon our attempts at supporting Linux altogether.
Caveat: my experiences may be outdated. See comments below
You don't need MonoDevelop in order to run ASP.NET program in Linux, make a shared folder on your development server (VMWare'd or real one), test often so you can easily work-around what's missing from Mono
That's the same approach I'm using in my .NET Remoting program I host on Ubuntu server. But I do the reverse, since I'm a solo programmer, I make a shared folder on my Windows development machine, then access that shared folder on my Ubuntu test server (vmware'd). On ASP.NET stuff, if the changes don't reflect on your Ubuntu test server, in Terminal just touch the Web.Config file in your Ubuntu test server. i.e. touch Web.Config, then refresh the page
Mono has a fully functional implementation of ASP.NET. This includes full support for ASP.NET Web Forms and Web Services. This essentially means that more or less any ASP.NET application that you have developed using with the .NET Framework will work with Mono. Obviously there might be changes needed, such as data access changes, removal of any
reliance on .NET Framework BCL types . Mono- Oracle users-.Net Programming C# : ubuntu 11.04

What's the best cross platform approach (Windows/Mac) to deploy a simple service/daemon (with simple UI)

I'm getting confused re the range of options for development & deploying some simple code & UI to both Windows & Mac. Can anyone assist re a good direction here. I do like Ruby, however if it makes sense to move away from this (e.g. java, c#) then so be it. Which development option would people suggest for this?
REQUIREMENTS
1. Support for Windows & Mac
2. The installation should be one-click and package all required dependencies as much as possible.
3. Scheduling capability required - so either via (a) installed as a service/daemon, or (b) ability for installation to schedule periodic call to script (former is preferred)
4. Functionality component requires - ability to access/parse web-sites, and then ability to make HTTP(S) calls out to my site to store parsed data. So heave on HTTP(S) methods. Proxy support required in app, so ability for user to enter host/port/username/password for the proxy server.
DEV OPTIONS ?? - This is where I need help/advice. Some of the many options that come to mind:
1. Develop in Ruby and then find packaging product to create Windows & Mac installation packages - not sure how doable this is yet? Especially if I need the installation to effectively install as a service.
2. Develop in Java for cross-platform? but then needs users to have installed JRE?
3. Develop as Firefox addon? I'm not across this, but even if you can write custom code, then the issue would be firefox would have to be running I guess.
4. Develop windows & Mac versions separately, for example using Visual Studio Express to develop the windows version (assuming it can do HTTP work & create packages for installing services).
What would people suggest here? (would be nice to write once, push a button and then get the Mac & Windows installation packages spat out)
Thanks
I've written cross-platform C++ code and this was the kind of decision we were faced with.
Apologies in advance, but I'm not aware of any cross platform libraries that you can use for this, the systems are sufficiently different that they will require different deployment strategies.
Suggestion 1:
build your application in Mono
build two deployment strategies, separating the deployment issues into the "installers"
on windows deploy with some scripting language or installer application that inserts your app into the task scheduler, or write some simple C# code (see below)
on the Mac use the built-in UNIX cron demon to periodically call your app.
I think this strategy is fairly simple. The platform-specific effort is centered on the deployment. The app uses no resources until it runs, and it uses simple mechanisms to activate it. Logging and error handling can be done using the file system.
Suggestion #2:
write the platform independent code as an assembly
write the platform-specific code for each platform as necessary:
on windows that's a windows service or a scheduled app installed with click-once
I've been away from a mac long enough that I don;t know what the strategy is there
again, additional effort for the deployment
This solution has the overhead of writing more specific code to interface with the particular services that the OS Supports. The benefit is that it should co-exist better with the OS with the additional effort (ie: hook into OS-level resource management, reporting, logging and error management).
Note: C# interface to the Windows task scheduler here Unfortunately it's probably not Mono-compatible.
Mono will support the cross platform Windows and Mac requirement.
Mono allowed me to develop a Windows Forms executable assembly on my Windows environment and then simply execute the exact same executable using Mono on OS X.
Some of the GUI controls behave a little differently, but if you're writing a Service you will probably not be creating a complex GUI.
Checking the mono docs, I see the System.Net.WebClient class is implemented and provides a simple cross platform way to retrieve data over HTTP.
I used Visual Studio 2008 on a Windows machine to develop the application completely as I would any other .NET Windows Forms app. Then the resultant executable can be run directly on the Mac machine by passing it as an argument to the mono runtime.
You probably want to treat installation/deployment as a separate issue from the implementation of the actual application code. You may well need a platform specific installer for each supported platform, but each installer will deploy the same single binary (or set of binaries) on each platform thanks to Mono.

Categories