Visual Studio не переключается между ссылками проекта и NuGet без перезапуска

Я хотел бы иметь возможность переключаться между NuGet и ссылками на проекты. Для этого я создал собственное решение и конфигурацию проекта, которую назвал Debug.csproj, Затем я переместил пакеты в соответствующий раздел и поместил ссылку на проект в другой:

  <ItemGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <PackageReference Include="..." Version="..." />
  </ItemGroup>

  <ItemGroup Condition="'$(Configuration)|$(Platform)'=='Debug.csproj|AnyCPU'">
    <ProjectReference Include=".." /> 
  </ItemGroup>

Проблема, с которой я сталкиваюсь, заключается в том, что Visual Studio переключается между этими настройками и не перезапускает их. Я могу выбрать любую конфигурацию в раскрывающемся списке, и ничего не происходит - Dependecies дерево остается прежним (оно правильно настроено в Configuration Manager).

Есть ли способ вызвать изменение без перезапуска Visual Studio? (не уверен, уместно ли это, но единственным пользовательским расширением, которое я использую, является ReSharper)

2 ответа

Есть ли способ вызвать изменение без перезапуска Visual Studio?

Вы можете выгрузить свой проект и перезагрузить проект. Когда вы изменяете отображение в обозревателе решений, вы можете вызвать изменение, перезагрузив файл проекта.

Так как у вас есть то же самое PlatformВы можете переместить его из условия, например:

  <ItemGroup Condition="'$(Configuration)' == 'Debug'">
    <PackageReference Include="..." Version="..." />
  </ItemGroup>

  <ItemGroup Condition="'$(Configuration)'=='Debug.csproj'">
    <ProjectReference Include=".." /> 
  </ItemGroup>

Надеюсь это поможет.

Проблема с подходом, который вы описываете в вопросе, заключается в том, что условие основано на конфигурации сборки. Узел «Зависимости» в обозревателе решений не выполняет повторную оценку, если это изменится.

Однако, похоже, это происходит, если вы меняете свойство. Это подход, который я использовал, и просто изменил значение ShouldUsePackageReferencesInDebugсвойства и сохранения файла проекта было достаточно, чтобы привести к переоценке узла зависимостей (я мог видеть, как элемент исчезает из пакетов, а другой появляется в проектах - или наоборот).

      <PropertyGroup>
    <ShouldUsePackageReferencesInDebug>false</ShouldUsePackageReferencesInDebug>
</PropertyGroup>

<ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
    <PackageReference Include="<Package Name>" Version="1.0.0" Condition="$(ShouldUsePackageReferencesInDebug)" />
    <ProjectReference Include="<Project Path>" Condition="!$(ShouldUsePackageReferencesInDebug)" />
</ItemGroup>

<ItemGroup Condition=" '$(Configuration)' == 'Release' ">
    <PackageReference Include="<Package Name>" Version="1.0.0" />
</ItemGroup>

Обратите внимание, что я настроил его так, чтобы наш конвейер сборки, использующий Releaseконфигурация сборки всегда будет использовать PackageReference. То, что условие здесь основано на конфигурации сборки, не является проблемой, поскольку нет экземпляра обозревателя решений, который нужно переоценивать.

Другие вопросы по тегам