web-dev-qa-db-ja.com

ASP.NET Frameworkプロジェクトで新しいcsprojファイル構造を使用できますか?

新しい.csproj形式には、NuGetパッケージ管理との緊密な統合や大幅に冗長性の低い構造など、クラシックファイルに対するいくつかの重要な改善が含まれています。 .NET Framework 4.6とASP.NETを引き続き使用しながら、これらの利点を獲得したい(私のプロジェクトは、.NET Coreバージョンをまだ作成していないUmbracoに依存しているため)。

最大の課題はデバッグ体験のようです。ASP.NETCoreプロジェクトは、ドットネットコアアプリケーションを実行し、リバースプロキシをIISインスタンスにセットアップすることを想定しています。このプロセスは完全に異質です。 .NET Frameworkモデル。VisualStudioでデバッグのセットアップをどこから始めたらよいかわかりません。

これらの2つのプロジェクトモデルを混在させる方法はありますか?

23
Paul Turner

GitHubには、ASP.NET(非コア)アプリケーション用の新しいcsproj形式のサポートに関する未解決の問題がたくさんあります。それらのいくつか:

おそらく既に理解しているように、ASP.NETアプリケーションでは新しいcsproj形式はまだサポートされていません。動作させることは可能ですが、スムーズではありません。

少し前に、楽しみのために、新しいcsproj形式でASP.NET MVCプロジェクトを作成しようとしました。私はそれを機能させましたが、私はそれをあまり遊んでいませんでした。だから、あなたの経験を知ることは面白いでしょう。

手順は次のとおりです。

  1. 古い不要なプロジェクトファイルを削除します。

    • MvcApplication.csproj
    • MvcApplication.csproj.user
    • packages.config
  2. 次の内容で新しいMvcApplication.csprojを作成します。

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>net461</TargetFramework>
      </PropertyGroup>
    
      <PropertyGroup>
        <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
        <OutputPath>bin\</OutputPath>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Antlr" version="3.4.1.9004" />
        <PackageReference Include="bootstrap" version="3.0.0" />
        <PackageReference Include="jQuery" version="1.10.2" />
        <PackageReference Include="jQuery.Validation" version="1.11.1" />
        <PackageReference Include="Microsoft.ApplicationInsights" version="2.2.0" />
        <PackageReference Include="Microsoft.ApplicationInsights.Agent.Intercept" version="2.0.6" />
        <PackageReference Include="Microsoft.ApplicationInsights.DependencyCollector" version="2.2.0" />
        <PackageReference Include="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.2.0" />
        <PackageReference Include="Microsoft.ApplicationInsights.Web" version="2.2.0" />
        <PackageReference Include="Microsoft.ApplicationInsights.WindowsServer" version="2.2.0" />
        <PackageReference Include="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.2.0" />
        <PackageReference Include="Microsoft.AspNet.Mvc" version="5.2.3" />
        <PackageReference Include="Microsoft.AspNet.Razor" version="3.2.3" />
        <PackageReference Include="Microsoft.AspNet.Web.Optimization" version="1.1.3" />
        <PackageReference Include="Microsoft.AspNet.WebPages" version="3.2.3" />
        <PackageReference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.5" />
        <PackageReference Include="Microsoft.CSharp" Version="4.4.1" />
        <PackageReference Include="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" />
        <PackageReference Include="Microsoft.Net.Compilers" version="2.1.0" developmentDependency="true" />
        <PackageReference Include="Microsoft.Web.Infrastructure" version="1.0.0.0" />
        <PackageReference Include="Modernizr" version="2.6.2" />
        <PackageReference Include="Newtonsoft.Json" version="6.0.4" />
        <PackageReference Include="Respond" version="1.2.0" />
        <PackageReference Include="WebGrease" version="1.5.2" />
      </ItemGroup>
    
      <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
      </ItemGroup>
    
      <ItemGroup>
        <Reference Include="System.Web" />
      </ItemGroup>
    
      <ItemGroup>
        <Compile Update="Global.asax.cs">
          <DependentUpon>Global.asax</DependentUpon>
        </Compile>
      </ItemGroup>
    
      <ItemGroup>
        <Content Include="Web.config">
          <SubType>Designer</SubType>
        </Content>
        <Content Include="Web.*.config">
          <DependentUpon>Web.config</DependentUpon>
          <SubType>Designer</SubType>
        </Content>
      </ItemGroup>
    
    </Project>
    

    上記の長いパッケージリストには、デフォルトのASP.NET MVCアプリケーション用に追加されたデフォルトパッケージが含まれています。アプリケーションで使用される他のパッケージを追加する必要があります。

    Microsoft.CSharpパッケージを追加することを忘れないでください。そうしないと、ViewBag割り当てで次のコンパイルエラーが発生します。

    エラーCS0656:コンパイラに必要なメンバー 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'がありません

    ASP.NETプロジェクトでは、Microsoft.CSharpがプロジェクトへの参照として追加されます。ただし、NuGetパッケージとして使用することをお勧めします。

    回避できなかった唯一の直接参照はSystem.Webです。

  3. プロジェクトのデバッグ

    デバッグが苦痛になる可能性があると言われたとき、あなたは正しかった。 Visual StudioはASP.NETアプリケーションであることを認識していないため、デバッグセッションを開始するためのインスタントメソッドはありません。

    ここに2つの可能な解決策があります:

    a。 IIS Expressをデバッグに使用します。

    IIS Express実行可能ファイルに基づいてデバッグを構成するのは非常に簡単です。次のデバッグプロファイルを作成するだけです。

    enter image description here

    対応するlaunchSettings.json:

    {
      "profiles": {
        "ASP.NET Old csproj": {
          "commandName": "Executable",
          "executablePath": "c:\\Program Files\\IIS Express\\iisexpress.exe",
          "commandLineArgs": "/path:\"$(SolutionDir)$(ProjectName)\" /port:12345"
        }
    }
    

    b。 IISをデバッグに使用します。

    IIS Managerは、プロジェクトのディレクトリを指すアプリケーションを作成します。これで、w3wp.exeプロセスにアタッチして、アプリケーションをデバッグできます。

GitHub のサンプルプロジェクトです。基本的に、上記の手順に従って新しいcsproj形式に移行されたデフォルトのASP.NET MVCプロジェクトです。コンパイル、実行、デバッグできます(IIS Expressを含むプロファイル)

46
CodeFuller