【问题标题】:How to programmatically determine what kind is a .NET project如何以编程方式确定 .NET 项目的类型
【发布时间】:2020-01-23 23:34:54
【问题描述】:

如何以编程方式确定我的项目是 .NET Foundation 还是 .NET Standard? 或者,或者,如何以编程方式确定是 Xamarin.IOS 还是 Windows 窗体。

这是一个 .Net 标准类库,它将在 iPhone 上的 .NET Xamarin.IOS 或 Windows 10 笔记本电脑上的 .NET Windows 窗体应用程序上运行。

应用需要知道它在这些平台中的哪一个。

【问题讨论】:

    标签: .net


    【解决方案1】:

    Microsoft Visual Studio 使用 GUID 来识别项目类型。正如tekeye blog post中提到的:

    这允许不同公司的开发人员通过以下方式调用项目 同名,但如果他们遇到彼此的作品相同 已命名的项目仍可被 Visual Studio 唯一识别。

    为项目类型生成的 GUID 放置在ProjectTypeGuids 下的.csproj 文件和Project 下的.sln 文件中。

    .csproj 文件中:

    <ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
    

    .sln 文件中:

    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsFormsTestApp", "WindowsFormsTestAppWindowsFormsTestApp.csproj", "{F00515D6-939F-4E92-8FFD-A5D8F811FF84}"
    

    您可以在上面链接的 Tekeye 博客文章中找到完整的 GUID 列表。

    要以编程方式从.csproj 文件中获取此文件,您可以使用下面的 sn-p:

    XNamespace msbuild = "http://schemas.microsoft.com/developer/msbuild/2003";
    XDocument projDefinition = XDocument.Load("projectPath\file.csproj");
    IEnumerable<string> references = projDefinition
        .Element(msbuild + "Project")
        .Elements(msbuild + "PropertyGroup")
        .Elements(msbuild + "ProjectTypeGuids")  
        .Select(refElem => refElem.Value);
    

    如果您没有在.csproj 文件中找到ProjectTypeGuids,您可以通过使用正则表达式解析文件在.sln 文件中找到Guid,就像@watbywbarif 在this stack thread 中所做的那样。

    【讨论】:

    • 这看起来很复杂,我担心会花费数小时的开发时间。我希望调用一些 .Net 函数,该函数返回一个代码,表明应用程序是 Windows Forms 或 Xamarin.IOS 或 .Net Foundation 或 .Net Standard。
    • 不幸的是,这是实现目标的唯一途径。但是还有另一种方式,我认为它不是适合您问题的解决方案,甚至您会喜欢它。您可以使用 Visual Studio 自动化制作加载项以访问 C# 中的项目属性窗口,然后在代码中调用该加载项。但我认为这不是一个好主意。
    猜你喜欢
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2012-01-26
    • 1970-01-01
    相关资源
    最近更新 更多