问题标签 [common-project-system]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2372 浏览

c# - 使用新的 CSPROJ 格式时,在代码隐藏中无法识别 WPF 控件

我在 Visual Studio 2017 中使用新的 CSPROJ 格式创建了一个 WPF 应用程序。

经过

我可以成功构建并运行应用程序。但是,我有一个问题,即代码编辑器无法识别放置在 XAML 中的任何控件,因此我收到错误错误并且在编辑器中没有智能感知。

代码编辑器中的错误错误

重现步骤

  1. 推出 VS 2017
  2. 创建一个新的“WPF App (.NET Framework)”C#项目
  3. 将 csproj 文件编辑为如下所示:

项目文件:

  1. 将一个名为“button1”的按钮添加到 MainWindow.xaml,如下所示:

主窗口.xaml

  1. 尝试在“MainWindow.xaml.cs”中的代码中设置按钮标题。

您将看到智能感知无法识别按钮已定义: 代码编辑器中的错误错误

但是,项目构建并成功运行(请注意,您需要手动运行可执行文件 -F5不起作用......)

0 投票
1 回答
27 浏览

visual-studio - 在集成 shell 中加载 CPS 项目

我有一个 Visual Studio 的自定义语言和调试编辑器扩展,我希望能够使用 Visual Studio 集成 shell 进行分发。

但是,我无法使用集成的 shell 应用程序打开自定义项目文件:

当扩展作为 Visual Studio 2015 的一部分直接加载时,一切正常。

自定义项目类型是使用Visual Studio 通用项目系统创建的

0 投票
1 回答
545 浏览

visual-studio - 在 VS 2017 自定义项目系统中,如何在解决方案资源管理器中将项目项设为粗体?

我正在为 VS 2017 编写项目系统扩展,我的语言中的每个项目都有一个文件,即“启动文件”。我希望该文件在解决方案资源管理器中显示为粗体。

VS 的 Python 工具可以满足我的需求,但我的扩展是建立在新的项目系统框架 (CPS) 之上的。更改解决方案资源管理器项目外观的 CPS 方法是实现IProjectTreePropertiesProvider,但我看不到任何更改文本样式的方法——只有图标。

0 投票
1 回答
393 浏览

c# - 我的 .csproj 是使用 .NET 项目系统还是通用项目系统

我正在阅读 .NET 基金会的.NET 项目系统GitHub 存储库上的文档,发现用于在 Visual Studio 上运行 C# 项目的最新系统默认是新的项目系统;但是,随着旧系统Common Project System (CPS)正在逐步淘汰,有哪些迹象可以帮助我辨别我的项目使用的是哪个版本的项目系统?

这是由 Visual Studio 决定的,还是我能够查看.csproj文件并知道正在使用哪个系统来管理我的项目?

我不是在寻找 .NET SDK 的版本,而是在寻找哪个项目系统正在运行我的解决方案的文件组织和项目清单。

0 投票
0 回答
382 浏览

nuget-package - 使用通用项目系统安装 NuGet 包并使用自定义项目类型解析引用

我正在使用 Visual Studio Common Project System 创建一个项目类型并连接了 NuGet 包管理器。但是,当我安装软件包时,它会失败并出现以下错误:

我反编译了 NuGet 程序集并对其进行了调试,发现错误发生在NuGet.PackageManagement.VisualStudio.VsMSBuildProjectSystem.AddReferenceAsync这一行reference = References.Add(assemblyFullPath);。所以我尝试执行相同的代码并在尝试“System”和“[FullAssemblyPath]”时得到相同的错误。

VsMSBuildProjectSystem 源代码

我尝试调试一个普通的 Visual Basic 项目,发现它执行的命令略有不同References3.AddFiles(new[] { assemblyFullPath }, out var referencesArray);,这是因为 References 对象可以强制转换为 References3。事实证明,Visual Basic 项目是一种VSLangProj80.VSProject2类型,而我的自定义项目是一种VSLangProj.VSProject类型。

我还注意到,在我的自定义项目类型中,引用旁边有一个黄色感叹号,因为它们尚未解决。我相信这是问题的根源。我不确定 Visual Studio 如何解析引用,但通过调试我能够发现使用了 MSBuild 目标ResolveAssemblyReferences。当我在 Visual Basic 项目文件中覆盖它时,引用也显示黄色感叹号,但即使我的自定义项目返回相同的信息,引用仍然未解析。必须有其他使用的东西。

我想确认它可以工作,但要覆盖我发现基于硬编码项目类型 GUIDMSBuildNuGetProjectSystemFactory创建类的函数,它是一个内部类。VsMSBuildProjectSystem它似乎是通过导出MSBuildNuGetProjectProvider该 implements来连接的INuGetProjectProvider。我想用我自己的提供者覆盖它并用这段代码返回一个自定义实现,但不幸的是它永远不会被实例化。MSBuildNuGetProjectProvider 源代码

所以我只是破解了它并使用反射将我的类添加到MSBuildNuGetProjectSystemFactory并执行我的自定义类,覆盖添加引用的方法,而不是什么都不做。添加 NuGet 包成功,但是引用当然没有添加到项目中。MSBuildNuGetProjectSystemFactory 源代码

所以我仍然不知道 Visual Studio 是如何解析程序集的,我希望一旦修复它,NuGet 包管理器也能正常工作。我认为它可能会使用IVsDesignTimeAssemblyResolution,但我永远无法通过 MEF 实例化我的类。我想知道它是否在 Visual Studio 非托管代码中处理并且不存在扩展点,考虑到它是一个不同的项目类正在创建。

如果是这种情况,那么我认为我可以使用该INuGetProjectProvider界面来覆盖添加引用并通过直接编辑 XML 文件来完成。但为什么我的INuGetProjectProvider实现从未通过 MEF 实例化?我尝试将 Order 属性更改为 0 和 1000。Visual Studio MEF 在其自己的程序集中是否有 Nuget 的范围,所以我的课程永远不会被拾起?

0 投票
2 回答
1203 浏览

c# - 枚举 .csproj (dotnet core) 中的文件

我正在使用 C# 开发一个应该与 Visual Studio / MSBuild 一起使用的构建工具。 我想枚举属于 C# 项目的所有文件。项目格式是新的 (.NET Core) .csproj。

描述项目系统的文档指向使用 MSBuild(文件格式)或通用项目系统(项目树)。我对这两个 API 都不熟悉。查看这些各自项目的文档并没有立竿见影的帮助。

正如专家可能知道的那样,新的 .csproj 文件并未列出隐含在项目中的每个文件。另一方面,它可能会列出项目文件夹之外的“链接”文件。我想确保获得所有被视为项目一部分的文件。

最终,我想专注于特定的文件类型 (.json),但我认为一般问题值得一问。

总结一下:如何编写一个 C# 库,利用适当的包(希望很容易)枚举 csproj 中的所有文件?

0 投票
1 回答
181 浏览

visual-studio-2017 - VSIX 项目 - 属性工具窗口扩展

我搜索东西的方式可能有问题,但这是我的问题。我正在寻找一种在 Visual Studio 编辑器的属性工具窗口中实现自定义编辑工具的方法。我一直在查看几个文档参考,它们都导致使用不同的程序集,但我无法以我想要的方式工作。

首先,我尝试使用UITypeEditor类,以及我在这里找到的分步教程:https ://docs.microsoft.com/fr-fr/dotnet/api/system.drawing.design.uitypeeditor?view =net-5.0 我遇到的问题是它似乎只适用于 Winforms 项目,我正在尝试将它与 WPF 项目一起使用。

之后,我尝试按照本教程创建项目模板https ://docs.microsoft.com/en-us/visualstudio/extensibility/creating-a-basic-project-system-part-1?view= vs-2019 这使我认为本教程中使用的方法可能已被弃用或改进,使用AsyncPackages而不是ProjectPackages以及Microsoft.VisualStudio.Shell.Flavor程序集的外观似乎使无用ProjectNode类(它甚至不再出现,该方法已被替换为 void)。

我尝试探索的最后一点是ProjectSystem的使用,如此处所述:https ://github.com/microsoft/VSProjectSystem 实际上更糟,因为我无法让它像我想要的那样工作,我的项目类型是created 无法注册 C# 文件,并且我无法添加新类(我可能需要在这里更深入地挖掘,但我不知道去哪里寻找)。

所以基本上,我正在寻找帮助来扩展属性工具窗口,通过窗口中的编辑器,或者通过单击属性窗口中的省略号按钮打开的模式窗口。

感谢您阅读本文,如果您有任何信息,我很感兴趣。

0 投票
1 回答
18 浏览

visual-studio - 自定义项目类型中缺少“参考管理器”(在 VS 隔离外壳中)

我正在开发一个 VS IsolatedShell 2015 应用程序;我目前的目标是启用项目引用。
但是,当右键单击项目中的“引用”节点时,基本上没有可用的选项,尤其是在我的情况下,缺少引用管理器:

“参考”节点的上下文菜单

该项目本身是基于 CPS,所以也许我需要在那里的某个地方启用它?

该项目确实包含这些功能(如此处所述):
<ProjectCapability Include="AssemblyReferences;COMReferences;ProjectReferences;SDKReferences" />

我还添加了ReferenceManagerProjects&DependenciesTree功能(另一个链接),并确保存在已解析引用的规则文件(我通过手动向项目添加一些程序集引用来对此进行测试,并且这些引用正确显示)。

在 Shell .pkgundef 文件中,启用了“特定于 Web 的包”,如本页最后一个答案中所暗示的那样。
我还查看了所有其他 pkgdef/pkgundef 文件,但没有其他文件看起来应该由参考管理器负责。

还有其他地方可以锁定参考管理器吗?
或者是否需要为 CPS 实现一些接口才能启用此功能?

0 投票
1 回答
41 浏览

visual-studio - Visual Studio 2022 忽略项目文件中指定的 BaseIntermediateOutputPath 属性

我有一个包含大量项目的解决方案。为了将二进制文件与源代码分开,我将所有项目中的属性更改BaseOutputPath为“..\bin”,并将BaseIntermediateOutputPath所有项目中的属性更改为“..\obj”。

它适用于BaseOutputPath- 所有二进制文件都在公共目录中。对于中间路径,它根本不起作用。它破坏了项目,因为该obj目录仍然在项目文件夹中创建,但现在文件没有从项目中排除,并且显示为 Git 可提交。

我究竟做错了什么?这是正常行为吗?我不希望在项目目录中创建 obj 目录。我怎样才能实现这种行为?

现在我刚刚从项目中删除了该属性。至少这些obj文件夹没有显示为项目文件夹。