【问题标题】:How to determine MVC project from .csproj file如何从 .csproj 文件中确定 MVC 项目
【发布时间】:2019-11-17 10:29:29
【问题描述】:

我正在开发扩展,我想通过它确定当前项目是否在 MVC 框架上。我在 .csproj 文件中以编程方式检查这个。项目可以在 ASP.NET Core Web 或 ASP.NET Web 应用程序上。

如果我的应用程序是 MVC,我想知道有助于我返回 true 的具体检查/条件。

谢谢

【问题讨论】:

  • csproj 文件不足以判断是否为 MVC 项目。对于 .net core 3.0 项目,它们可以完全相同。请提供您正在开发的扩展程序是什么? (Visual Studio、Visual Studio Code 或其他......)
  • 您可以在同一个项目中同时使用 MVC、Web API 和网页。这让你感到困惑吗?

标签: c# asp.net asp.net-mvc asp.net-core


【解决方案1】:

嗯,可以将 MVC 功能添加到任何项目中,因此没有简单的方法可以从 proj 文件中分辨出来。但通常,如果它是在 Visual Studio 中创建为 MVC 项目,那么它将具有 MVC 项目类型 GUID 之一。

这些是taken from here

ASP.NET MVC 1   {603C0E0B-DB56-11DC-BE95-000D561079B0}
ASP.NET MVC 2   {F85E285D-A4E0-4152-9332-AB1D724D3325}
ASP.NET MVC 3   {E53F8FEA-EAE0-44A6-8774-FFD645390401}
ASP.NET MVC 4   {E3E379DF-F4C6-4180-9B81-6769533ABE47}
ASP.NET MVC 5   {349C5851-65DF-11DA-9384-00065B846F21}
Model-View-Controller v2 (MVC 2)    {F85E285D-A4E0-4152-9332-AB1D724D3325}
Model-View-Controller v3 (MVC 3)    {E53F8FEA-EAE0-44A6-8774-FFD645390401}
Model-View-Controller v4 (MVC 4)    {E3E379DF-F4C6-4180-9B81-6769533ABE47}
Model-View-Controller v5 (MVC 5)    {349C5851-65DF-11DA-9384-00065B846F21}

【讨论】:

    【解决方案2】:

    Net Core 有预处理器定义,当项目在 ASP.NET Core 中运行时,您可以使用它来设置一个常量

    #if NETSTANDARD1_6
         public const IsCore = true;
    #elif NETSTANDARD1_5
         public const IsCore = true;
    #elif NETSTANDARD1_4
         public const IsCore = true;
    #elif NETSTANDARD1_3
         public const IsCore = true;
    #elif NETSTANDARD1_2
         public const IsCore = true;
    #elif NETSTANDARD1_1
         public const IsCore = true;
    #elif NETSTANDARD1_0
         public const IsCore = true;
    #else
         public const IsCore = false;
    #endif
    

    或者,如果您(可以)将以下内容添加到您的 .csproj 中,则可以使用更简单的形式,在发布新框架时无需修改:

    在 .csproj 中:

    <PropertyGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch('$(TargetFramework)', '^netcoreapp\d'))">
      <DefineConstants>NETCORE</DefineConstants>
    </PropertyGroup>
    

    下面的代码在某处设置常量:

    #if NETCORE
         public const IsCore = true;
    #else
         public const IsCore = false;
    #endif
    

    How to set .NET Core in #if statement for compilation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多