Visual Studio 与语言无关的项目类型?

问题描述 投票:0回答:3

我正在编写一段代码,它只是一堆 JavaScript 和 JSON 文件——它是一个 grunt 插件,而不是一个网站——我想通过 Visual Studio 编辑文件并管理源代码控制。

我正在尝试构建一个“普通”msbuild 项目文件——不是 C#、不是 VB 等,因为这些文件在这种文件中无效。我可以编写一个非常简单的带有

.msbuildproj
扩展名的 MSBuild 文件,但无法将其加载到 VS2013 中,并且在任何地方都找不到示例。

有人知道如何仅仅为了文件管理而组合一个空的、与语言无关的项目吗?

visual-studio-2012 msbuild visual-studio-2013 project
3个回答
3
投票

我找到了相同的 msbuildproj 扩展,并想做类似的事情。我现在并不关心在 VS 中实际构建。我只想将所有文件包含在某些文件夹中,以减轻解决方案文件夹的缺点。经过一番搜索后,我发现了this帖子。有了 VS2017 并利用为 .NET Core 项目引入的新 MSBuild 项目格式,我能够使以下内容为我工作。

<Project Sdk="Microsoft.NET.Sdk">
  <ItemGroup>
    <Content Include="*" />
    <!-- Use "**" for all sub-folders -->
    <!--<Content Include="**" />-->
  </ItemGroup>

  <!-- A temporary solution, import C# Visual Studio design time targets in order to be able to load the project in Visual Studio -->
  <PropertyGroup>
    <CSharpDesignTimeTargetsPath Condition="'$(CSharpDesignTimeTargetsPath)'==''">$(MSBuildExtensionsPath)\Microsoft\VisualStudio\Managed\Microsoft.CSharp.DesignTime.targets</CSharpDesignTimeTargetsPath>
  </PropertyGroup>
  <Import Project="$(CSharpDesignTimeTargetsPath)" Condition="'$(CSharpDesignTimeTargetsPath)' != '' and Exists('$(CSharpDesignTimeTargetsPath)')" />
</Project>

1
投票

你基本上是对的:

  • Visual Studio 项目(即几乎所有现代类型)都是 MSBuild 项目。但是,Visual Studio 仅加载具有扩展的项目。您无法加载任意 MSBuild 项目。 (当然,您始终可以将 MSBuild 文件编辑为 XML。如果它已经作为项目加载,则必须先卸载它才能编辑它。)

  • 对于某些项目类型,您无法添加您想要的任何类型的文件。例如,WiX 项目不允许您添加 T4 模板 (.tt) 文件。这是一个耻辱。但是,您可以编辑项目来添加它们,这不会破坏任何内容。但这实际上取决于项目类型扩展的作者。尽管如此,我还没有找到任何无法添加到 C# 和 Visual Basic .NET 项目中的文件。

正如 SLaks 评论的那样,网站项目确实允许添加任何类型的文件,并且应该适合您的情况。


0
投票

使用现代 Visual Studio 版本,您现在可以根据要求使用

.msbuildproj
 项目类型创建与语言无关的 
Microsoft.Build.NoTargets
项目。还可以从 Visual Studio 用户界面将其添加到解决方案中,不会出现任何问题。这是一个仅运行 powershell 脚本的示例项目:

<Project Sdk="Microsoft.Build.NoTargets/3.7.0">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Exec Command="pwsh -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command &quot;Write-Output HelloWorld&quot;" />
  </Target>
</Project>

此解决方案唯一尴尬的方面是必须定义

TargetFramework
属性 ,但希望这可以在某个时候得到解决。

© www.soinside.com 2019 - 2024. All rights reserved.