Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot publish self-contained worker project referencing another #10902

Open
markmnl opened this issue Dec 1, 2019 · 20 comments
Open

Cannot publish self-contained worker project referencing another #10902

markmnl opened this issue Dec 1, 2019 · 20 comments

Comments

@markmnl
Copy link

markmnl commented Dec 1, 2019

When trying to publish single file exe for worker projects get error runtime identifier is required, but it was!

This happens when referencing another core 3 console project.

$ dotnet publish -r linux-x64 -c Release --self-contained true
Microsoft (R) Build Engine version 16.3.0+0f4c62fea for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 102.79 ms for C:\Dev\magnet-filewatcher\src\watcher\watcher.csproj.
  Restore completed in 102.79 ms for C:\Dev\magnet-filewatcher\src\worker\worker.csproj.
C:\Program Files\dotnet\sdk\3.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(127,5): error NETSDK1031: It is not supported to build or publish a self-contained application without specifying a RuntimeIdentifier.  Please either specify a RuntimeIdentifier or set SelfContained to false. [C:\Dev\magnet-filewatcher\src\watcher\watcher.csproj]

Steps to reproduce

  • Create new worker project with dotnet new worker
  • Add reference to your another core 3.0 console project with dotnet add reference
  • .NET Core SDK (3.0.100)
  • Windows 10 X64
    es).
@markmnl
Copy link
Author

markmnl commented Dec 2, 2019

I found one can get around the error by specifying <RuntimeIdentifier>linux-x64</RuntimeIdentifier> in the .csproj in both the worker and referenced console project..

@markmnl markmnl changed the title Cannot publish single file worker project Cannot publish single file worker project referencing another Dec 2, 2019
@scalablecory
Copy link

@jeffschwMSFT

@scott-ngan-cko
Copy link

This is also happening to me when creating a self-contained console that references another console. Having <RuntimeIdentifier>win-x64</RuntimeIdentifier> in both .csproj gets around the issue though

@swaroop-sridhar swaroop-sridhar changed the title Cannot publish single file worker project referencing another Cannot publish self-contained worker project referencing another Jan 4, 2020
@swaroop-sridhar
Copy link
Contributor

This issue should be moved to https://github.com/dotnet/sdk repo

@gimmi
Copy link

gimmi commented Mar 18, 2020

I had the same problem with NetCore 3.1

This was not working:

dotnet publish .\src\MyProj\MyProj.csproj `
  --configuration Release `
  --runtime win-x64 `
  --self-contained true

Fixed by removing --self-contained true (that is the default anyway)

dotnet publish .\src\MyProj\MyProj.csproj `
  --configuration Release `
  --runtime win-x64

@jeffschwMSFT jeffschwMSFT transferred this issue from dotnet/core Mar 18, 2020
@kitattyor
Copy link

Same issue with NetCore 3.1.

Temporary workaround as suggested by @markmnl

Add this to *.csproj file. Change RIDs as you wish
<PropertyGroup> <RuntimeIdentifier>win-x64</RuntimeIdentifier> </PropertyGroup>

@ata18
Copy link

ata18 commented Jul 26, 2020

The various combinations of --runtime and --self-contained w/ and without
<PropertyGroup> <RuntimeIdentifier>win-x64</RuntimeIdentifier> </PropertyGroup>
is all very confusing.

@gimmi 's suggestion worked for me. Thanks!

@luantian-terark
Copy link

Perhaps it will be helpful:

  1. Create a new classlibrary, then move all shared classes which are in base projects into the new project.
  2. Remove reference of two console projects.
  3. Add reference between classlibrary and console projects.

@darkguy2008
Copy link

darkguy2008 commented Nov 20, 2020

This is still happening in .NET 5. Any fixes? Specifying the RuntimeIdentifier in the .csproj file is NOT a solution because if you develop on Windows, then deploy for Linux, you'll need to have two .csproj files for each OS, NOT GOOD.

@doug62
Copy link

doug62 commented Nov 28, 2020

I have a similar/related issue, when i build for linux (Docker/Linux/Raspberry) I get:

ld not load file or assembly 'LibUsbDotNet, Version=3.0.0.0, Culture=neutral, PublicKeyToken=c677239abe1e02a9'. The system cannot find the file specified. Also notice for linux it doesn't emit the libusbdotnet.dll,

Tip for @darkguy2008 - you can put variables into your build so you can use 1 project file.

@MarcoLuglio
Copy link

MarcoLuglio commented Dec 14, 2020

@darkguy2008 property groups support conditions: <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
Still not a fix but better than having multiple files.
Reference is in: https://docs.microsoft.com/en-us/visualstudio/msbuild/propertygroup-element-msbuild?view=vs-2019
and https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-conditional-constructs?view=vs-2019

@JasonGiedymin
Copy link

You can specify multiple targets like so:
<RuntimeIdentifiers>win-x64;osx-x64;linux-x64</RuntimeIdentifiers>

as per the docs "Multiple RIDs can be defined as a semicolon-delimited list in the project file's element. "

@bricelam
Copy link
Contributor

Duplicate of #10566

@MarcioAB
Copy link

Add RuntimeIdentifier win-x64 in both projects P1 & P2 results in the following error message:
Assets file 'C:\xyz\P2\obj\project.assets.json' doesn't have a target for 'net6.0/win-x64'. Ensure that restore has run and that you have included 'net6.0' in the TargetFrameworks for your project. You may also need to include 'win-x64' in your project's RuntimeIdentifiers.

@darkguy2008
Copy link

darkguy2008 commented Jan 10, 2022

Add RuntimeIdentifier win-x64 in both projects P1 & P2 results in the following error message: Assets file 'C:\xyz\P2\obj\project.assets.json' doesn't have a target for 'net6.0/win-x64'. Ensure that restore has run and that you have included 'net6.0' in the TargetFrameworks for your project. You may also need to include 'win-x64' in your project's RuntimeIdentifiers.

When you change frameworks or runtimeidentifiers in the .csproj file, make sure to delete the bin & obj folders and recompile, I've gotten that before and it gets fixed when I remove those folders to make a clean build. Also check your .vscode/tasks.json file if you have any.

@darkguy2008
Copy link

@darkguy2008 property groups support conditions: <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> Still not a fix but better than having multiple files. Reference is in: https://docs.microsoft.com/en-us/visualstudio/msbuild/propertygroup-element-msbuild?view=vs-2019 and https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-conditional-constructs?view=vs-2019

Thank you and @doug62 , I ended up using project variables as suggested, just forgot to get back to you guys here :)

@MarcioAB
Copy link

Thanks but same error message even with bin & obj folders deleted.

The steps to reproduce:

  1. Create and sucessfully Publish a single P1 "hello" project.
  2. Add single P2 "hello" project and make P1 to reference P2.
  3. Publish gets error "It is not supported to build ... please specify a RuntimeIdentifier ..."
  4. Add "win-64" as RuntimeIdentifier in both P1 and P2.
  5. Publish gets error "Assets file 'C:\xyz\P2\obj\project.assets.json' doesn't have a target for 'net6.0/win-x64'. Ensure that restore has run and that you have included 'net6.0' in the TargetFrameworks for your project. You may also need to include 'win-x64' in your project's RuntimeIdentifiers."

@jozefizso
Copy link

This issue still exists in the .NET 6 SDK.

@ChangeTheCode
Copy link

I also have this issue. If I try to create an application dotnet publish xxx.csproj --no-restore --configuration release -p:PublishSingleFile=true --self-contained the build failed with the error "error NETSDK1031: It is not supported to build or publish a self-contained application without specifying a RuntimeIdentifier."
If a add -r winx64 it works. Now the interesting thing the MS documentation says there is no parameter -r.

dotnet publish [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
   [-c|--configuration <CONFIGURATION>]
   [-f|--framework <FRAMEWORK>] [--force] [--interactive]
   [--manifest <PATH_TO_MANIFEST_FILE>] [--no-build] [--no-dependencies]
   [--no-restore] [--nologo] [-o|--output <OUTPUT_DIRECTORY>]
   [--os <OS>] [-r|--runtime <RUNTIME_IDENTIFIER>]
   [--sc|--self-contained [true|false]] [--no-self-contained]
   [-s|--source <SOURCE>] [-v|--verbosity <LEVEL>]
   [--version-suffix <VERSION_SUFFIX>]

@adschmu
Copy link

adschmu commented Jan 10, 2023

I had the same issue with a test project referencing an ASP.NET Core web project.

This could be worked around with GlobalPropertiesToRemove="SelfContained" in .NET 6 (see #10566).

With .NET 7 SDK, this appears to be fixed for my projects, and I do not need the workaround anymore.

silvera added a commit to silvera/commandir that referenced this issue Mar 18, 2023
…ult if the '--runtime' flag is specified and the github issue (dotnet/sdk#10902) suggested doing it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests