Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why $(SolutionDir) is undefined in dotnet CLI?

I'm trying to build my project from dotnet CLI.

I'm using dotnet build and it fails.

How to reproduce:

  1. Create a simple console application using Visual Studio template

  2. Add a file named Colors.txt to the solution directory

  3. Add a file named Names.txt to the project directory

  4. Modify csproj file to include a post-build event

    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
    </PropertyGroup>
    
    <Target Name="CopySettingsToOutput" AfterTargets="PostBuildEvent">
        <Exec Command="copy $(ProjectDir)\Names.txt $(TargetDir)\Names.txt" />
        <Exec Command="copy $(SolutionDir)\Colors.txt $(TargetDir)\Colors.txt" />
    </Target>
    
  5. Now build using Visual Studio (it gets built)

  6. Now build using dotnet build command and it fails. It says:

error MSB3073: The command "copy *Undefined*\Colors.txt C:\\---path---\Colors.txt" exited with code 1.

Why is $(SolutionDir) undefined when using dotnet build?

like image 223
Alireza Hosseinitabar Avatar asked Aug 03 '26 10:08

Alireza Hosseinitabar


2 Answers

The workaround is to provide that property in dotnet command like:

$slnPath = 'directory where is solution'
dotnet build -property:SolutionDir=$slnPath

That can be useful when you use dotnet in any build pipelines like Azure DevOps.

like image 141
KondzioSSJ4 Avatar answered Aug 07 '26 00:08

KondzioSSJ4


I think this question can help you: link

More details can be found in @Kamalpreet's answer.

To fix the problem, you can paste the following snippet into your Directory.Build.props file:

<Project>
  <PropertyGroup>
    <SolutionDir Condition="'$(SolutionDir)'==''">
      $(MSBuildThisFileDirectory)
    </SolutionDir>
  </PropertyGroup>
</Project>

This approach is a bit different from another answer. It avoids passing -property:SolutionDir=... on every build by defining it once in Directory.Build.props, so it works automatically for all builds. Link is for context; the solution is summarized here.

like image 41
GeMiNi Avatar answered Aug 07 '26 02:08

GeMiNi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!