【问题标题】:RunCommand property not defined on WPF app migrated to new csproj format迁移到新 csproj 格式的 WPF 应用程序上未定义 RunCommand 属性
【发布时间】:2017-05-23 17:24:20
【问题描述】:

我正在尝试将在旧 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 属性。

【问题讨论】:

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


    【解决方案1】:

    对于 1.0.0 和 1.1.0 SDK,Microsoft.NET.Sdk.targets 文件会在 Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework' and '$(OutputType)' == 'Exe'" 时尝试设置 RunCommand 属性。但是由于项目指定了&lt;OutputType&gt;winexe&lt;/OutputType&gt;(它需要),所以条件不满足(当然其他都不满足)。

    这似乎已在即将发布的 2.0.0 SDK 中得到修复(source,您必须探索其他文件才能找到 _IsExecutable 属性),它应该会在下一个 VS2017 更新中提供。

    与此同时,我选择在我的 .csproj 中手动设置属性:&lt;RunCommand&gt;bin\Debug\net47\MyApp.exe&lt;/RunCommand&gt;(我本可以花更多时间来使用更多 SDK 定义的属性,但我必须在 SDK 目标完成后安排它导入的,为简单起见我省略了)

    【讨论】:

      【解决方案2】:

      我们在这里谈论什么样的“迁移”?没有内置的迁移工具,它比之前的“VS 2012 到 VS2013”​​类型升级要多得多,它是一种根本不同的格式。

      我知道有些人曾尝试(未成功)手动更新 .csproj XML,它通常以挫败感告终,并且无处可去。

      老实说,我 100% 建议您制作全新的项目并手动将文件复制进去。这需要一段时间,但至少您可以完全确定它确实可以工作,而且您不会花费数小时尝试敲打几乎没有文档记录的新 XML 格式让您头疼不已。

      当然更好的选择是内置的东西来为你做。

      【讨论】:

      • 我正在使用的“模型”csproj 对于 WPF 项目非常有效,除了这个问题。不幸的是,我还没有找到 WPF 项目的官方新样式模板,因为微软的重点是 UWP,而不是 WPF。我使用 WPF 只是因为我需要一些 UWP 不可用的功能(在任务托盘中运行)。
      • 项目类型与您使用的框架完全没有链接。
      猜你喜欢
      • 2017-10-23
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      相关资源
      最近更新 更多