msbuild: Cannot find reference assemblies for .NET 3.5 or lower using core msbuild

dotnet/sdk supports targeting .NET 3.5 just fine if you use desktop msbuild, but it fails to find the reference assemblies using core msbuild. Both desktop and core work fine for NET4.0+.

Steps to reproduce

Create a new project with dotnet new Change the TargetFramework to net35 or lower Add <RuntimeIdentifier>win10-x64</RuntimeIdentifier> to the .csproj dotnet restore dotnet build

I’ve been seeing this issue since the move to msbuild. Targeting .NET 3.5 and lower works in the Preview 2 release SDK. All the relevant targeting packs are installed.

Expected behavior

A successful build

Actual behavior

Fails with the error: ... error MSB3644: The reference assemblies for framework ".NETFramework,Version=v3.5" were not found. To resolve this, install the SDK or Targeting Pack for this framework version or retarget your application to a version of the framework for which you have the SDK or Targeting Pack installed. ...

Environment data

dotnet --info output:

.NET Command Line Tools (1.0.0-preview3-004056)

Product Information: Version: 1.0.0-preview3-004056 Commit SHA-1 hash: ccc4968bc3

Runtime Environment: OS Name: Windows OS Version: 10.0.14393 OS Platform: Windows RID: win10-x64

Moved from https://github.com/dotnet/cli/issues/4626 for @Thealexbarney.

Moved from https://github.com/dotnet/sdk/issues/369 for @piotrpMSFT

@rainersigwald

About this issue

  • Original URL
  • State: closed
  • Created 8 years ago
  • Reactions: 28
  • Comments: 35 (12 by maintainers)

Commits related to this issue

Most upvoted comments

I got this working by adding the following to the .csproj file:

<PropertyGroup>
  <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net35'">$(MSBuildProgramFiles32)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client</FrameworkPathOverride>
</PropertyGroup>

Unfortunately, the “normal” path C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5 doesn’t work in this case because it doesn’t have a copy of mscorlib.dll.

Update

This can now be addressed using the Microsoft.NETFramework.ReferenceAssemblies NuGet package. Click through to the “Project Website” for documentation.

Issues a pain when you’re trying to generate a multi-target nuget package; prior to the great cheese moving of 2016 I had no issues building a package that targeted 2/3.5/4/4.5/etc Is this likely to be sorted in the next few days when VS17s released? Seems ambitious…

Admittedly I’m presuming this is msbuild related as it came with RC4 / VS2017 changes and the issue in the error being thrown is the same as the op (albeit for every version specified).

<PropertyGroup>
      ...  <TargetFrameworks>net20;net35;net40;net45;net451;net452;net462;netstandard1.3;netstandard1.6;netstandard1.6.1;netcoreapp1.1</TargetFrameworks>
    ...

etc https://github.com/BcryptNet/bcrypt.net/blob/master/src/BCrypt.Net/BCrypt.Net.csproj

Hell, it might be that after all these changes and dotnet versions I need to set fire to my PC and start afresh to get things to build 🔥

Yeah, that doesn’t work for me, as there is no 3.5 version of System.Web available anywhere in that folder structure. 😞

What’s the work-around for people who need to build such projects on VS 2017? I just ran into this today, and the only thing I could figure out was to compile on a separate machine with only VS 2015 installed.

@JoshClose you can directly call

msbuild /t:Pack /p:Configuration=Release

For version suffixes, add /p:VersionSuffix=beta-123 (however, note https://github.com/NuGet/Home/issues/4337)

I see. I think that’s the answer to my question… 😄

(don’t use dotnet build -f net35, use msbuild /p:TargetFramework=net35)

Should we we expect support from the CLI to .NET 3.5 eventually or is this just not planned?

The @NightOwl888 solution stopped working again.

C:\Program Files\dotnet\sdk\2.0.2\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets(165,5): error : Assets file '...\obj\project.assets.json' doesn't have a target for '.NETFramework,Version=v3.5,Profile=Client'. Ensure that restore has run and that you have included 'net35-client' in the TargetFrameworks for your project.