Свойство RunCommand, не определенное в приложении WPF, перенесено в новый формат csproj

Я пытаюсь перенести приложение WPF, созданное в старом формате csproj, на новый формат csproj, определенный для VS2017.

Мне удалось получить приложение для компиляции, но я, когда я пытаюсь запустить его в отладчике под VS 2017, я получаю следующее сообщение об ошибке:

Невозможно запустить ваш проект. Свойство "RunCommand" не определено.

Интересно, что если я дважды щелкну exe в File Explorer, он запустится просто отлично.

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

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <LanguageTargets>$(MSBuildExtensionsPath)\$(VisualStudioVersion)\Bin\Microsoft.CSharp.targets</LanguageTargets>
    <OutputType>winexe</OutputType>
    <TargetFramework>net47</TargetFramework>
    <ApplicationIcon />
    <OutputTypeEx>winexe</OutputTypeEx>
    <StartupObject />
  </PropertyGroup>

  <ItemGroup>
    <EmbeddedResource Update="Properties\Resources.resx" Generator="ResXFileCodeGenerator" LastGenOutput="Resources.Designer.cs" />
    <Compile Update="Properties\Resources.Designer.cs" DesignTime="True" AutoGen="True" DependentUpon="Resources.resx" />
    <Compile Update="Settings.Designer.cs" AutoGen="True" DependentUpon="Settings.settings" />
    <None Update="Settings.settings" LastGenOutput="Settings.Designer.cs" Generator="SettingsSingleFileGenerator" />

    <Page Include="**\*.xaml" SubType="Designer" Generator="MSBuild:Compile" Exclude="App.xaml" />
    <Compile Update="**\*.xaml.cs" SubType="Designer" DependentUpon="%(Filename)" />

    <Resource Include="assets\*.*" />

    <ApplicationDefinition Include="App.xaml">
      <Generator>MsBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </ApplicationDefinition>

  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Autofac" Version="4.6.0" />
    <PackageReference Include="Autofac.Extras.CommonServiceLocator" Version="4.0.0" />
    <PackageReference Include="Extended.Wpf.Toolkit" Version="3.0.0" />
    <PackageReference Include="Hardcodet.NotifyIcon.Wpf" Version="1.0.8" />
    <PackageReference Include="MaterialDesignColors" Version="1.1.3" />
    <PackageReference Include="MaterialDesignThemes" Version="2.3.0.823" />
    <PackageReference Include="MvvmLightLibs" Version="5.3.0" />
    <PackageReference Include="Serilog" Version="2.4.0" />
    <PackageReference Include="Serilog.Sinks.RollingFile" Version="3.3.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\WPFUtilities\J4JUI\J4JUI.csproj" />
  </ItemGroup>

  <ItemGroup>
    <Reference Include="System.ComponentModel.DataAnnotations" />
  </ItemGroup>

  <Import Project="$(MSBuildSDKExtrasTargets)" Condition="Exists('$(MSBuildSDKExtrasTargets)')" />
</Project>

Где установлено свойство RunCommand и как его установить?

Обновить

Поиграв с настройками проекта, я настроил параметры отладки для запуска исполняемого файла, созданного проектом (по умолчанию "запускать" проект).

Это позволяет мне запускать приложение в отладчике в VS 2017... и заставляет меня думать, что это может быть ошибкой в ​​VS 2017, поскольку свойство RunCommand не определяется средой сборки так, как это должно быть.

2 ответа

Решение

Для SDK 1.0.0 и 1.1.0 файл Microsoft.NET.Sdk.targets пытается установить свойство RunCommand, когда Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework' and '$(OutputType)' == 'Exe'", Но так как проект указывает <OutputType>winexe</OutputType> (что необходимо), условие не выполняется (и, конечно, ни один из других также).

Похоже, что это было исправлено в готовящемся 2.0.0 SDK ( источник, вам придется изучить другие файлы, чтобы найти _IsExecutable свойство), которое должно быть отправлено в следующем обновлении VS2017.

Тем временем я решил установить свойство вручную в моем.csproj: <RunCommand>bin\Debug\net47\MyApp.exe</RunCommand> (Я мог бы потратить больше времени, чтобы использовать больше свойств, определенных SDK, но мне пришлось бы запланировать это после импорта целей SDK, которые я упустил для простоты)

О какой "миграции" мы говорим здесь? Встроенного инструмента миграции нет, и он намного больше, чем предыдущее обновление типа "VS 2012 до VS2013", это принципиально другой формат в целом.

Я знаю, что некоторые люди пытались (безуспешно) вручную обновить .csproj XML, как правило, заканчивается разочарованием и не получить с ним никуда.

Честно говоря, я бы на 100% рекомендовал создавать совершенно новые проекты и вручную копировать ваши файлы. Это займет некоторое время, но, по крайней мере, вы будете абсолютно уверены, что это действительно сработает, и вы не тратите часы, пытаясь ударить себя по голове. стена с едва документированным новым форматом XML.

Конечно, лучшим вариантом будет что-то встроенное, чтобы сделать это для вас.

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