У меня есть Directory.Build.props со следующим содержимым:
<Project>
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
</PropertyGroup>
<ItemGroup>
<ProjectReference
Condition = "'$(MSBuildProjectName)' != 'X' And '$(MSBuildProjectName)' != 'Y' And '$(MSBuildProjectName)' != 'Logging'"
Include = "$(SolutionDir)\Libraries\Logging\Logging.csproj"/>
</ItemGroup>
</Project>
Когда я пытаюсь запустить консольное приложение, которое находится внутри решения, я получаю следующую ошибку:
System.IO.FileNotFoundException: Could not load file or assembly 'Logging, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.
Работают все функции IDE, такие как автозаполнение и использование автозаполнения.
Если я вручную добавлю ссылку, как это работает:
<ProjectReference Include = "..\Libraries\Logging\Logging.csproj"/>
и если использовать $(SolutionDir), это не работает:
<ProjectReference Include = "$(SolutionDir)\Libraries\Logging\Logging.csproj"/>
Попытаюсь сделать это, спасибо
$(SolutionDir) не является переменной MSBuild по умолчанию, но она устанавливается VisualStudio и Rider, поэтому она нормально работала в среде IDE, но при попытке запустить не смогла найти каталог.
Чтобы исправить это, я в основном создаю переменную SolutionDir следующим образом:
<PropertyGroup>
<SolutionDirectory>$(MSBuildThisFileDirectory.TrimEnd('\\'))</SolutionDirectory>
</PropertyGroup>
Спасибо mtreit#6470 за помощь в отладке.
Пожалуйста, переместите свое решение в ответ - это облегчит другим людям