Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Msbuild 能给我一张“票”吗;有时是便携式的”;要在Visual Studio Express中加载的类库项目?_Msbuild_Visual Studio Express_Portable Class Library - Fatal编程技术网

Msbuild 能给我一张“票”吗;有时是便携式的”;要在Visual Studio Express中加载的类库项目?

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

对于1.1版,主要目标是构建一个可移植的类库风格,主要用于支持Windows Phone和Windows应用商店应用程序。这意味着会丢失一些功能,因此我们构建了一个桌面配置和一个PCL配置(分别针对调试、发布和“签名发布”)

为了避免使用无数个项目文件,所有6种配置都存在于同一个项目文件中。自定义以生成名为“Portability”的属性,该属性设置为“PCL”或“Desktop”,如下所示:

<!-- 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