我正在尝试将旧 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 属性在哪里设置,如何设置?
Update
通过使用项目设置,我配置了调试选项来启动项目创建的可执行文件(默认设置是“运行”项目)。
这让我可以在 VS 2017 内的调试器中启动该应用程序...并让我认为这可能是 VS 2017 中的一个错误,因为构建环境未按应有的方式定义 RunCommand 属性。
对于 1.0.0 和 1.1.0 SDK,Microsoft.NET.Sdk.targets https://github.com/dotnet/sdk/blob/rel/1.1.0/src/Tasks/Microsoft.NET.Build.Tasks/build/Microsoft.NET.Sdk.targets#L272文件尝试设置 RunCommand 属性时Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework' and '$(OutputType)' == 'Exe'"
。但由于项目规定<OutputType>winexe</OutputType>
(它需要),条件不满足(当然其他条件也不满足)。
这似乎已在即将发布的 2.0.0 SDK 中得到修复(source https://github.com/dotnet/sdk/blob/release/2.0.0/src/Tasks/Microsoft.NET.Build.Tasks/build/Microsoft.NET.Sdk.targets#L378,您必须探索其他文件才能找到_IsExecutable
属性),应该在下一个 VS2017 更新中提供。
与此同时,我选择在 .csproj 中手动设置属性:<RunCommand>bin\Debug\net47\MyApp.exe</RunCommand>
(我本可以花更多时间来使用更多 SDK 定义的属性,但我必须在导入 SDK 目标后安排它,为简单起见,我将其省略)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)