在WPF应用程序上未定义的RunCommand属性已迁移到新的csproj格式

时间:2017-05-23 17:24:20

标签: c# visual-studio visual-studio-2017

我正在尝试将以旧csproj格式构建的WPF应用程序迁移到为VS2017定义的新csproj格式。

我已经能够让应用程序编译,但是当我尝试在VS2017下的调试器中启动它时,我收到以下错误消息:

  

无法运行您的项目。 “RunCommand”属性未定义。

有趣的是,如果我在文件资源管理器中双击exe,它就可以正常启动。

仅供参考,该项目最初是一个控制台应用程序,然后我将其修改为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 个答案:

答案 0 :(得分:2)

对于1.0.0和1.1.0 SDK,Microsoft.NET.Sdk.targets文件尝试在Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework' and '$(OutputType)' == 'Exe'"时设置RunCommand属性。但由于项目指定<OutputType>winexe</OutputType>(它需要),因此不满足条件(当然也没有其他条件)。

这似乎已经在即将推出的2.0.0 SDK(source中得到修复,您将不得不探索其他文件以查找_IsExecutable属性),这些应该在下一个版本中发布VS2017更新。

与此同时,我选择在我的.csproj中手动设置属性:<RunCommand>bin\Debug\net47\MyApp.exe</RunCommand>(我可能花了更多时间来使用更多SDK定义的属性,但我必须在SDK之后安排它目标是导入的,我为了简单起见而遗漏了

答案 1 :(得分:0)

什么样的&#34;迁移&#34;我们在这说话吗?没有内置的迁移工具,它比以前的&#34; VS 2012到VS2013&#34;类型升级,它是一种根本不同的格式。

我知道有些人尝试(不成功)手动更新.csproj XML,它通常会以挫败感结束,并且无法使用它。

老实说,我会100%建议制作全新的项目并手动复制你的文件。需要一段时间,但至少你完全确定它实际上会起作用,你不会花几个小时尝试用几乎没有记录的新XML格式敲打你的头。

当然,更好的选择是内置为你做的事情。