Msbuild 能给我一张“票”吗;有时是便携式的”;要在Visual Studio Express中加载的类库项目?
对于1.1版,主要目标是构建一个可移植的类库风格,主要用于支持Windows Phone和Windows应用商店应用程序。这意味着会丢失一些功能,因此我们构建了一个桌面配置和一个PCL配置(分别针对调试、发布和“签名发布”) 为了避免使用无数个项目文件,所有6种配置都存在于同一个项目文件中。自定义以生成名为“Portability”的属性,该属性设置为“PCL”或“Desktop”,如下所示:Msbuild 能给我一张“票”吗;有时是便携式的”;要在Visual Studio Express中加载的类库项目?,msbuild,visual-studio-express,portable-class-library,Msbuild,Visual Studio Express,Portable Class Library,对于1.1版,主要目标是构建一个可移植的类库风格,主要用于支持Windows Phone和Windows应用商店应用程序。这意味着会丢失一些功能,因此我们构建了一个桌面配置和一个PCL配置(分别针对调试、发布和“签名发布”) 为了避免使用无数个项目文件,所有6种配置都存在于同一个项目文件中。自定义以生成名为“Portability”的属性,该属性设置为“PCL”或“Desktop”,如下所示: <!-- Set the custom Portability property based o
<!-- Set the custom Portability property based on configuration -->
<PropertyGroup>
<Portability Condition="'$(Configuration)' == 'Debug Portable'">PCL</Portability>
<Portability Condition="'$(Configuration)' == 'Release Portable'">PCL</Portability>
<Portability Condition="'$(Configuration)' == 'Signed Release Portable'">PCL</Portability>
<!-- Default to desktop if not explicitly set above -->
<Portability Condition="'$(Portability)' == ''">Desktop</Portability>
</PropertyGroup>
C:\Path\To\NodaTime.csproj : error :
The project file 'C:\Path\To\NodaTime.csproj' cannot be opened.
There is a missing project subtype.
Subtype: '{786C830F-07A1-408B-BD7F-6EE04809D6DB}'
is unsupported by this installation.
<!--
<ProjectTypeGuids>(Guids as before)</ProjectTypeGuids>
-->
这通常工作得很好-我有不同的解决方案配置,因此我可以立即构建和测试所有内容,并且我只需要将每个新的.cs
文件添加到单个项目文件中。所以在Visual Studio 2012 Professional(我就是这么用的)下,我非常高兴
当我尝试在Visual Studio Express(VS2010或VS2012)中加载解决方案时,问题就出现了。在加载解决方案时,出现一个错误,即某些项目无法加载,生成PCL版本的两个项目的生成输出如下:
<!-- Set the custom Portability property based on configuration -->
<PropertyGroup>
<Portability Condition="'$(Configuration)' == 'Debug Portable'">PCL</Portability>
<Portability Condition="'$(Configuration)' == 'Release Portable'">PCL</Portability>
<Portability Condition="'$(Configuration)' == 'Signed Release Portable'">PCL</Portability>
<!-- Default to desktop if not explicitly set above -->
<Portability Condition="'$(Portability)' == ''">Desktop</Portability>
</PropertyGroup>
C:\Path\To\NodaTime.csproj : error :
The project file 'C:\Path\To\NodaTime.csproj' cannot be opened.
There is a missing project subtype.
Subtype: '{786C830F-07A1-408B-BD7F-6EE04809D6DB}'
is unsupported by this installation.
<!--
<ProjectTypeGuids>(Guids as before)</ProjectTypeGuids>
-->
这两个项目拒绝加载,因此您甚至无法浏览源代码
我真的希望,即使Express用户无法构建PCL版本,他们仍然能够加载解决方案、浏览源代码并构建非PCL版本。MSBuild可以从命令行运行,但这并不友好
我已尝试删除引用PCL项目配置的解决方案配置,但没有任何帮助。奇怪的是,甚至注释掉XML元素,如下所示:
<!-- Set the custom Portability property based on configuration -->
<PropertyGroup>
<Portability Condition="'$(Configuration)' == 'Debug Portable'">PCL</Portability>
<Portability Condition="'$(Configuration)' == 'Release Portable'">PCL</Portability>
<Portability Condition="'$(Configuration)' == 'Signed Release Portable'">PCL</Portability>
<!-- Default to desktop if not explicitly set above -->
<Portability Condition="'$(Portability)' == ''">Desktop</Portability>
</PropertyGroup>
C:\Path\To\NodaTime.csproj : error :
The project file 'C:\Path\To\NodaTime.csproj' cannot be opened.
There is a missing project subtype.
Subtype: '{786C830F-07A1-408B-BD7F-6EE04809D6DB}'
is unsupported by this installation.
<!--
<ProjectTypeGuids>(Guids as before)</ProjectTypeGuids>
-->
没有帮助-尽管删除行会有帮助。就好像VisualStudio实际上并没有将其作为真正的XML文件加载。(我还没有尝试将带有注释掉的元素的版本加载到VS Pro中。)
如果需要的话,我可以继续生成单独的PCL项目文件,但是如果可能的话,我真的想避免它——这会让正常的开发更加痛苦。同样,我可以只生成Express PCL和解决方案文件,但我还是不想这样做——这感觉不对
虽然理想情况下我希望支持VS Express 2010和2012,但如果有一个只适用于2012年的解决方案,那将是一个良好的开端
那么,有没有办法说服Visual Studio Express,尽管有条件属性组(其条件不满足)引用了它不知道的项目类型,但它确实可以加载项目?如这里所回答:这里:
express中不支持可移植类库项目 SKU…需要更高的SKU以获得全面支持。当然是二进制的 (例如,将其用作参考)只是不是项目/来源 支持 我可以想象这有一个简单的原因-有不同类型的VS2012 Express版本:用于Windows Phone开发、桌面应用程序、Windows 8应用程序。。。我打赌Windows Phone Express edition不知道Windows Phone项目类型,反之亦然。这可能是PCL不受支持的简单原因
尽管可移植类库的想法非常好,但它在许多方面仍然非常有限,例如,据我所知,您不能使用使用#if xy的条件编译。如果您真的必须使用Visual Studio Express进行开发,那么最好为每个平台使用带有引用源文件和条件编译的项目。David Kean在这里的评论给出了我目前使用的答案: 或者完全删除元素-这将选择“可移植”的增强功能,例如用于更改目标框架的UI等 我已经试过了,效果很好。在所有设备都已正确安装的机器上,您甚至可以在Express下构建PCL版本!我已经验证了生成的二进制文件确实是一个PCL,而且看起来很好
如果我后来发现自己遇到了一些问题,我不会感到惊讶,但就目前而言,这对我来说还不错。如果没有Visual Studio中的增强功能,我可以轻松地生活下去——我的项目具有非常不同的构建配置,这已经让我感到困惑,因此我认为我没有得到多少好处。哇,这是一个非常有趣的问题。非常奇怪VS是如何加载的XML@pst:哪一部分仅适用于快速版本?加载失败会导致错误。我不知道“评论”部分。我将澄清这两个方面。除了关于VS尝试加载注释的xml片段的部分外,这看起来确实像Express edition的目的:您无法处理不受支持的项目类型,无论当前配置是否使它们处于活动状态。我不知道你为什么觉得奇怪。把它比作带着练习册参加考试,发誓你不会用它。因此,它首先是被阻止的。是一个属性,用于指示VS在打开给定项目文件时要加载的项目系统。显然,如果它仍然在评论中看到它,那么读取它的东西就不是真正的XML阅读器。有一点鸡和蛋的问题;项目系统读取XML,但VS在自己读取此属性之前不知道加载哪个项目系统-这是一个真正的黑客行为。我不认为有什么方法可以实现您想要的-您需要将可移植项目分离为单独的项目,或者完全删除元素-这将选择“可移植”增强,例如用于更改目标框架的UI等。作为一个完整的旁注,我真的建议不要将portable视为单独的构建,而是使用portable core,然后使用单独的程序集来实现特定于桌面的功能。看看RX扩展对v2做了什么,作为我的意思的一个例子。我不希望PCLs是b