我正在尝试将以旧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属性不是由构建环境按照应有的方式定义的。
答案 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格式敲打你的头。
当然,更好的选择是内置为你做的事情。