2017-05-23 89 views
2

古いcsproj形式で構築されたWPFアプリケーションを、VS2017用に定義された新しいcsproj形式に移行しようとしています。WPFアプリケーションでRunCommandプロパティが定義されていません新しいcsproj形式に移行しました

私はコンパイルするアプリを取得することができましたが、私はVS2017の下でデバッガでそれを起動しようとすると、私は、私は次のようなエラーメッセージが出ます:

プロジェクトを実行することができません。 "RunCommand"プロパティは定義されていません。

面白いことに、ファイルエクスプローラ内のexeをダブルクリックすると、うまく起動します。

FYIのプロジェクトは当初はコンソールアプリケーションでしたが、その後私は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

Microsoft.NET.Sdk.targetsファイルは、Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework' and '$(OutputType)' == 'Exe'"のときにRunCommandプロパティを設定しようとします。しかし、このプロジェクトでは<OutputType>winexe</OutputType>(それが必要なもの)が指定されているため、条件は満たされません(もちろん他のものもどちらでもありません)。

これは、次のVS2017アップデートに同梱される、2.0.0 SDK(source_IsExecutableのプロパティを見つけるために他のファイルを調べる必要があります)で修正されているようです。

私の.csproj:<RunCommand>bin\Debug\net47\MyApp.exe</RunCommand>でプロパティを手動で設定することを選択しました(もっとSDK定義のプロパティを使うのにもっと時間を費やしていたかもしれませんが、SDKターゲットをインポートした後にスケジュールする必要があります私はシンプルさのために除外しました)

0

私たちはここでどのような「移行」をしていますか?既存のマイグレーションツールはありません。これは以前の「VS 2012〜VS2013」タイプのアップグレード以上のものです。基本的に異なるフォーマットです。

.csproj XMLを手動で更新しようとした人がいるとわかっている人もいますが、通常は不満で終わります。

正直なところ私は新しいプロジェクトを作成し、手動でファイルをコピーすることを100%推奨します。しばらく時間がかかりますが、少なくとも実際にはうまくいくと確信しています。ほとんど新しいXMLフォーマットで壁に頭を打つ。

もちろん、より良いオプションは、あなたのためにそれを行うために組み込まれたものです。

+0

私が使っている "モデル" csprojは、この1つの問題を除いてWPFプロジェクトではうまく機能します。残念ながら、私はWPFではなく、UWPに焦点を当てているため、WPFプロジェクト用の正式な新しいスタイルのテンプレートは見つかりませんでした。 UWPで利用できない機能(タスクトレイで実行中)が必要なため、WPFを使用しています。 –

+0

プロジェクトタイプには、使用しているフレームワークにまったくリンクがありません。 – user9993

関連する問題