从NetStandard转换为Framework之后,Visual Studio 2017不会将CSPROJ视为有效的项目文件

Ted*_*ord 4 visual-studio-2017

在VS Enterprise 2017 15.8.2中完成了以下操作。我已经将.NET Framework项目(C#)转换为netstandard,然后由于生成问题不得不将其转换回。通过从git恢复先前的提交来完成转换。但是,现在VS无法将项目识别为有效项目。链接的单元测试项目将生成警告

找不到引用的组件“ <项目名称>”。

尝试查看项目属性会产生错误

尝试加载项目属性窗口时发生错误。关闭窗口,然后重试。找不到会员。(来自HRESULT的异常:0x80020003(DISP_E_MEMBERNOTFOUND))

构建选择选项从构建菜单中消失,而构建/调试选项从项目上下文菜单中消失。解决方案资源管理器的依赖项节点为空。我看到过其他帖子,其中有人描述了类似的情况,可以通过重新打开解决方案或将vs模式更改为其他开发类型或删除bin / obj来解决。这些都不起作用,也没有完全重新启动。考虑到该项目文件曾经是框架,我怀疑.gitignore覆盖了某个地方需要删除的某些内容。

小智 9

我自己遇到了同样的问题。似乎与解决方案文件有关。我从解决方案中删除了该项目,然后再次将其重新添加。这使VS将其识别为正确的项目类型。希望这可以帮助其他人避免在此问题上花费过多时间。


jen*_*ens 5

@bbent 的低级替代品。结果相同的最终结果。

使用文本编辑器打开 sln 文件并为您的项目指定匹配的PROJECT-TYPE-GUID。格式是:

格式:

Project("<PROJECT-TYPE-GUID>") = "<proj name>", "<proj file path>", "<unique project guid>"
EndProject
Run Code Online (Sandbox Code Playgroud)

经典 C# 项目示例:

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibOne", "LibOne\LibOne.csproj", "{D5590E95-BFCC-4939-9D15-685D25B6BBE7}"
EndProject
Run Code Online (Sandbox Code Playgroud)

netcore 的示例,相应的 SDK 样式项目:

Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibTwo", "LibTwo\LibTwo.csproj", "{D5590E95-BFCC-4939-9D15-685D25B6BBE7}"
EndProject
Run Code Online (Sandbox Code Playgroud)

项目类型-guid 是一个 GUID(定义我的 MS),代表('c#'、'c++'、'xna'、'folder'、'web site' 等)。

摘抄:

C#          {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
folder      {2150E333-8FDC-42A3-9474-1A3956D46DE8}
core        {9A19103F-16F7-4668-BE54-9A1E7A4F7556}
wpf         {60DC8134-EBA5-43B8-BCC9-BB4BC16C2548}
Run Code Online (Sandbox Code Playgroud)

不过,微软没有任何官方消息!完整列表可能仅在 Visual Studio 源代码中。但是 ID 不会改变,至少在过去十年中不会。