We have multiple applications using two different targeted frameworks, some are web apps (3.5), and some are winform controls (2.0).
How can we ensure that all the applications are built against their corresponding framework?
Do we have to use the 3.5 version of MSBuild with the 3.5 targeted apps? and MSBuild v2.0 with the 2.0 apps? Will MSBuild auto build against the targeted frameworks unless otherwise instructed?
As long as you ensure you that you are running the highest MSBuild version it should compile all the versions of your Targeted apps. If you are running inside VS then it will take care of compiling this for you. If you are going to directly build all the projects with MSBuild then take a look into
Multi-targeting Overview
https://msdn.microsoft.com/en-us/library/hh264223.aspx and
MSBuild Target Framework and Target Platform
https://msdn.microsoft.com/en-us/library/hh264221.aspx
Related
In my project i have to create platform independent code. My project(Based on .net framework 4.6.1 which i have convert it into .net core 3.1) was developed long ago and its based on windows environment now we convert it into Linux and Mc environment also. so is there any way to detect all windows specific classes so we can change it for Mc and Linux also or we just read the entire code and find each function and convert it. because its very time taken process to read entire code and change according to requirement so is there any other way to do it?
Check this article Overview of porting from .NET Framework to .NET Core first .
so is there any way to detect all windows specific classes so we can change it for Mc and Linux also or we just read the entire code and find each function and convert it.
.NET Portability Analyzer is a tool that analyzes assemblies and provides a detailed report on .NET APIs that are missing for the applications or libraries to be portable on your specified targeted .
try-convert is the tool that will help in migrating .NET Framework projects to .NET Core.
Run on Linux and Mac platforms
.NET Core is cross-platform and it runs on macOS, Linux, and Windows. .NET Core supports the previously mentioned operating systems as your development workstation. With .NET Core you can target any application type that’s running on any platform. Visual Studio provides an Integrated Development Environment (IDE) for Windows and macOS. You can also use Visual Studio Code, which runs on macOS, Linux, and Windows.
.NET Core vs. .NET Framework for server apps
We have a large & complex system running under .Net 4.0. We want to start introducing code written for .Net 4.5, but can't (yet) assume that .Net 4.5 is installed on all the developer machines, build machines and test labs. So I'm looking for a way to compile certain projects in MSBuild using assemblies which are available on disk, on machines which have only .Net 4.0 installed.
Per the documentation it seems possible. The 4.5 reference assemblies are available in the msbuild environment, and I've been experimenting with the TargetFrameworkVersion, FrameworkPathOverride and TargetFrameworkMoniker attributes, but so far without success.
Any hints, suggestions or working samples would be most helpful.
To build a .NET Framework 4.5 application, you must also have the .NET Framework 4.5 reference assemblies.
Installation
The .NET Framework 4.5 replaces the common language runtime (CLR), targets, tasks, and tools of the .NET Framework 4 without renaming them. Essentially, it creates a modified and improved .NET Framework 4.
Background
We have a C++ solution that has been moved from VS2005 to VS2010 where the project files were targeting the .net framework 3.5 but since moving over to VS2010, all of the project files were showing that they were targeting the.net framework 4.0. I have since changed the .vcxproj files manually so that they are targeting the .net framework 3.5, using the method described in the Community Content on this link
The Problem
When I build these project files, manually or via an automated build, the output assemblies are still targeting the .net framework 4.0. I can tell this by using various methods described here. I also know that this is the case as I build and run the installer for this application. Once the application has been installed (which then shows as a service), I try to start the service on the target machine. This service will not start on a machine without the .net framework 4.0 installed. If 4.0 is then installed, the service will start, so this is another test that I can run that shows me that the application has a dependency on .net framework 4.0 which it should not.
The Aim
Ideally, I need to build this application so that the outputs are targeting the .net framework 3.5 instead of 4.0 so that it will actually run as it is supposed to! I have tried to use the 3.5 version of MSBuild as described in one of the answers given for this question here but got the same error that is described underneath that post.
Can anyone help with this? It's proving to be a right pain and I've been banging my head against the wall for over a week trying to get this sorted!
Thanks again in advance
Make sure you follow all the instructions as provided in the first link you posted.
For example,
Make sure you have Visual Studio 2008 installed on the build server.
Make sure you also change each project's "Platform Toolset" to v90.
Verify the project's framework version: "In Solution Explorer, right-click your project and then click Properties. In the Property Pages window, in the left pane, expand Common Properties and then select Framework and References. Verify that the new Framework version appears at the top of the right pane."
I'm using MonoTouch (monoDevelop 2.6) to develop an iPhone app. I've created an iPhone windows based project, a monoTouch library project and a NUnit project. I'll like to add a reference from my NUnit project, to my library project so that I can write some unit tests against my UI agnostic code.
Sadly, the library and UI projects use the runTime MonoForiPhone and can't be added as references to the NUnit project (which uses the Mono/3.5 target framework).. The projects are greyed out under Edit References with a message "Incompatible framework..."
Likewise if I create a regular .net library for my business logic, the UI cannot reference the project.
How can I create units against my iPhone application?
Add a monotouch library project which contains non UI code.
Add a nUnit project.
Add files to the nUnit project (by creating links).
Now, I can run the at least one of the tests.
What I would suggest is to create two projects, one to target MonoTouch and one which targets .NET 3.5/4/whatever for NUnit testing purposes.
In case you missed it, there is now a NUnitLite runner available for MonoTouch which is designed to work for UI agnostic code and executed on devices (or simulator).
See: .NET Unit test runner for iOS
Can anyone tell me why when I create Monotouch projects in the latest drop of MonoDevelop it is targeting the 1.0 framework instead of 3.5, as my projects in earlier versions do? This causes it to not be loadable in VS2010, which I tend to use for coding, while building/testing in MonoDevelop. Here is the version info:
Release ID: 20509002
Git revision: 35a0397615c02f7830d46dfcd31a6c0cb86e9f85
Build date: 2011-04-06 03:37:58+0000
And here is the difference in the csproj files between versions:
Old:
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
New:
<TargetFrameworkVersion>v1.0</TargetFrameworkVersion>
The v3.5 was a bug; MonoTouch projects never targeted the .NET v3.5 framework. They target the MonoTouch framework, which is arbitrarily versioned as v1.0.
Improvements in MD 2.6 have allowed us to deal with custom .NET frameworks in a similar way to VS 2010. This means that instead of storing the "closest" .NET framework then internally switching it to the correct framework after the project is loaded, we can directly handle particular project types using a particular custom framework.
If you want to load MT project in VS, you already have to make changes to the project - temporarily remove the project flavor GUID (though a trivial VS addin could make that unnecessary). This framework version fix means that you also have to change the target framework to one that VS has. For MonoTouch 4, rather than using .NET 3.5, I would recommend using either Silverlight 4 or .NET 4.
The best solution would be to set VS to actually use the MonoTouch framework, so you'd get accurate code completion and compilation. In VS 2010 that's now possible. Simply set the TargetFrameworkIdentifier of the project to "MonoTouch", then install the custom framework by copying all the MonoTouch framework assemblies to C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoTouch\v1.0 and adding a FrameworkList.xml manifest in the RedistList subdirectory.
I've created a small open source project that enables you to build MonoTouch projects inside Visual Studio 2010. The readme for the project also explains how to get round the "v1.0" problem for the target framework version.
The project is available at https://github.com/follesoe/VSMonoTouch.
Since that's a Monotouch project, nobody expects it to work for Visual Studio or Windows.