Use all TFM’s with SDK-style projects in Visual Studio for Mac
TL;DR
You can now use SDK-style projects, with all supported TFM’s, in Visual Studio for Mac. See getting started for details.
Issue
While Visual Studio for Mac supports the SDK-style projects, there have been a couple of issues blocking use of TFM’s other than net, netstandard, and netcoreapp.
- Those TFM’s are hard-coded and an SDK-style project containing any other target frameworks is blocked.
- Xamarin on the Mac has a multi-valued
MSBuildExtensionsPathproperty. That means that it can search for targets in different locations. Unfortunately the logic this works with is limited to the<Import />element, so if you set properties, as is required to useLanguageTargets, it won’t work. Fortunately, with some brainstorming with Ankit Jain and Mikayla Hutchinson, we found a solution.
Getting Started
You’ll need a few things:
- Latest stable channel of Visual Studio for Mac
- .NET Core 2 SDK (even if you’re not targeting .NET Standard 2 or .NET Core, the SDK style projects use these targets). Download here.
- Matt Ward‘s Extension to VSfM that removes TFM checks on SDK-style projects. Binary | Source. Install by going to
Visual Studio -> Extensions... -> Install from file...
Then, create a new SDK-style project and use the latest version of the MSBuild.Sdk.Extras package, at least version 1.1.0-beta.69:
At the end of the project file, just before the closing tag, you’ll also need the following, as per the MSBuild SDK Extras readme:
Here’s a complete example of using the SDK-style projects with an iOS class library:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>xamarinios10</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MSBuild.Sdk.Extras" Version="1.1.0-beta.69" PrivateAssets="all" />
</ItemGroup>
<Import Project="$(MSBuildSDKExtrasTargets)" Condition="Exists('$(MSBuildSDKExtrasTargets)')" />
</Project>
Building these projects
These projects will build in the IDE (VSfM, VS, etc) or the command line. If you use the command line, you must use msbuild, not dotnet build. Keep in mind that with msbuild, you must explicitly call restore first, so your build steps will look like this:
Notes
For the beta, since it’s a SemVer2 package, you must be using the NuGet v3 feed. If your VSfM prefs have https://www.nuget.org/api/v2/, you need to update that to be https://api.nuget.org/v3/index.json.
Support
If you run into issues, please file a bug on the MSBuild SDK Extras project site: https://github.com/onovotny/MSBuildSdkExtras/issues and reach
me @onovotny.
Broken link: https://www.microsoft.com/net/download/core#/sdk
Not sure what you’re seeing, it appears to work for me?
Weird, I got some sort of 404 before (assumed it was the # character). It’s working now.