如何以编程方式确定.NET项目的类型 如何编程确定我的项目是.NET基金会还是.NET标准? 或者,如何以编程方式确定Xamarin.IOS或Windows窗体

如何以编程方式确定.NET项目的类型 如何编程确定我的项目是.NET基金会还是.NET标准? 或者,如何以编程方式确定Xamarin.IOS或Windows窗体,.net,.net,这适用于将在iPhone上的.Net Xamarin.IOS或Windows 10笔记本电脑上的.Net Windows窗体应用程序上运行的.Net标准类库 应用程序需要知道它在这些平台中的哪个平台上。Microsoft Visual Studio使用GUID来识别项目类型。如中所述: 这使得不同公司的开发人员可以通过 相同的名字,但是如果他们遇到彼此的作品,他们是一样的 命名的项目仍然可以被VisualStudio唯一地识别 为项目类型生成的GUID放置在ProjectTypeGuids下的.

这适用于将在iPhone上的.Net Xamarin.IOS或Windows 10笔记本电脑上的.Net Windows窗体应用程序上运行的.Net标准类库


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

Microsoft Visual Studio使用GUID来识别项目类型。如中所述:

这使得不同公司的开发人员可以通过 相同的名字,但是如果他们遇到彼此的作品,他们是一样的 命名的项目仍然可以被VisualStudio唯一地识别

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

.csproj
文件中:

<ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsFormsTestApp", "WindowsFormsTestAppWindowsFormsTestApp.csproj", "{F00515D6-939F-4E92-8FFD-A5D8F811FF84}"
您可以在上面链接的Tekeye博客文章中找到完整的GUID列表

要以编程方式从
.csproj
文件中获取此信息,可以使用以下代码段:

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);
XNamespace msbuild=”http://schemas.microsoft.com/developer/msbuild/2003";
XDocument projDefinition=XDocument.Load(“projectPath\file.csproj”);
IEnumerable references=projDefinition
.Element(msbuild+“项目”)
.Elements(msbuild+“PropertyGroup”)
.Elements(msbuild+“ProjectTypeGuids”)
.选择(refElem=>refElem.Value);

如果您没有在
.csproj
文件中找到
ProjectTypeGuids
,您可以在
.sln
文件中找到Guid,方法是使用regex解析文件,就像@watbywbarif在中所做的那样。

这看起来很复杂,而且我担心会花费数小时的开发时间。我想调用一些.NET函数,返回一个代码,该代码指示应用程序是Windows窗体或XAMARIN.IOS或.NET基金会或.NET标准。不幸的是,这是实现目标的唯一途径。但还有另一种方式,我认为它不是适合你的问题的解决方案,甚至你也不会喜欢它。您可以使用visual studio automation生成一个外接程序,以访问c#中的“项目属性”窗口,然后在代码中调用该外接程序。但我认为这不是个好主意。