code

새 csproj 파일 구조를 ASP와 함께 사용할 수 있습니까?NET Framework 프로젝트?

starcafe 2023. 8. 16. 22:30
반응형

새 csproj 파일 구조를 ASP와 함께 사용할 수 있습니까?NET Framework 프로젝트?

새로운 .csproj 형식은 NuGet 패키지 관리와의 긴밀한 통합 및 훨씬 덜 상세한 구조를 포함하여 기존 파일에 비해 몇 가지 향상된 기능을 제공합니다.사용하면서 이러한 이점을 얻고 싶습니다.NET Framework 4.6 및 ASP.NET (내 프로젝트는 아직 a를 생산하지 않은 움브라코에 의존하기 때문입니다.NET Core 버전).

가장 큰 문제는 디버깅 경험인 ASP인 것 같습니다.NET Core 프로젝트에서는 닷넷 코어 응용 프로그램을 실행하고 IIS 인스턴스에 대한 역방향 프록시를 설정해야 합니다.이 프로세스는 에 완전히 적용되지 않습니다.NET Framework 모델과 저는 Visual Studio에서 디버깅 설정을 어디서부터 시작해야 할지 모르겠습니다.

이 두 프로젝트 모델을 혼합할 수 있는 방법이 있습니까?

GitHub에는 ASP를 위한 새로운 csproj 형식 지원과 관련하여 많은 미해결 문제가 있습니다.NET(Non-Core) 애플리케이션.그 중 일부:

아마 이미 이해하셨겠지만, 새로운 csproj 형식은 아직 ASP에서 지원되지 않습니다.NET 응용 프로그램.그것을 작동시키는 것은 가능하지만, 그것은 원활하지 않을 것입니다.

얼마 전에 저는 ASP를 만들려고 했습니다.재미 삼아 새로운 csproj 형식으로 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'가 없습니다.C 샤프.런타임 바인더.CSSharpArgumentInfo입니다.작성'

    ASP.NET 프로젝트에서는Microsoft.CSharp프로젝트에 대한 참조로 추가됩니다.하지만 NuGet 패키지로 소비하는 것이 좋습니다.

    수 은 수없유직참접다같다습니음과조는피할입니다.System.Web.

  3. 프로젝트 디버깅

    디버깅이 번거로울 수 있다는 당신의 말이 옳았습니다.Visual Studio는 ASP를 모르기 때문입니다.NET 응용 프로그램입니다. 디버깅 세션을 시작할 수 있는 즉각적인 방법이 없습니다.

    여기에 두 가지 가능한 솔루션이 있습니다.

    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"
        }
    }
    

    디버깅에 IIS를 사용합니다.

    IIS 관리자에서 프로젝트의 디렉터리를 가리키는 응용 프로그램을 만듭니다. 이제다연여응프디있수다습니버할에 하여 응용 수 .w3wp.exe과정.

GitHub에 대한 샘플 프로젝트입니다.기본적으로 기본 ASP입니다.NET MVC 프로젝트는 위의 단계에 따라 새 csproj 형식으로 마이그레이션되었습니다.컴파일, 실행 및 디버깅할 수 있습니다(IIS Express용 프로필 포함).

저는 와 관련하여 이 깃허브 이슈를 팔로우하고 있으며, 최근 게시된 댓글에는 마지막 누락된 부분이 추가되어 있습니다.기본적으로 다음과 같은 .csproj 파일을 사용합니다.

<Project>
  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
  <PropertyGroup>
    <OutputType>Library</OutputType>
    <OutputPath>bin\</OutputPath>
    <TargetFramework>net48</TargetFramework>
    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
    <PublishProfileImported>true</PublishProfileImported>
  </PropertyGroup>
  <ItemGroup>
    <ProjectCapability Include="DotNetCoreWeb" />
    <ProjectCapability Include="SupportsSystemWeb" />
  </ItemGroup>
  <!-- add your packagereference/content/etc includes here -->
  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </PropertyGroup>
  <!-- order is important! -->
  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
  <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" />
</Project>

모든 것이 작동합니다!

  • 비주얼 스튜디오 시작 시 정상적인 실행 및 디버그 경험은 올바른 application host.config를 사용하여 표현됩니다.시작 설정에서 sslport를 입력하면 ssl과 함께 작동하기도 합니다.
  • 일반적인 편집 및 디버그 면도기 사용 및 지능형/자동 완성 기능.

여전히 누락된 것은 마우스 오른쪽 버튼을 클릭하여 배포하는 기능뿐입니다.하지만 당신이 사용할 수 있는 것처럼.msbuild /p:DeployOnBuild=True배포하기 위해 이제 더 이상 업그레이드를 방해하는 누락된 항목이 보이지 않습니다.

ASP를 마이그레이션하는 가장 좋은 방법입니다.새 csproj 형식으로 NET MVC가 다음 명령을 사용하여 try-convert를 사용하고 있습니다.

try-convert -p .\project.csproj --keep-current-tfms --no-backup --force-web-conversion

--keep-current-tfms대상 프레임워크가 변경되지 않는 옵션입니다.

그런 다음 프로젝트 SDK를 MSBuild로 변경해야 합니다.기본 SDK가 이전 ASP를 지원하지 않기 때문에 SDK.SystemWeb.NET MVC.

<Project Sdk="MSBuild.SDK.SystemWeb/4.0.66">

에 덕분입니다.MSBuild.SDK.SystemWebVS의 모든 기능을 이전 csproj 형식과 동일한 방식으로 사용할 수 있어야 합니다.여기서 이 라이브러리에 대한 문서를 보관할 수 있습니다.

언급URL : https://stackoverflow.com/questions/47915353/can-the-new-csproj-file-structure-be-used-with-a-asp-net-framework-project

반응형