我正在编写一段代码,它只是一堆 JavaScript 和 JSON 文件——它是一个 grunt 插件,而不是一个网站——我想通过 Visual Studio 编辑文件并管理源代码控制。
我正在尝试构建一个“普通”msbuild 项目文件——不是 C#、不是 VB 等,因为这些文件在这种文件中无效。我可以编写一个非常简单的带有
.msbuildproj
扩展名的 MSBuild 文件,但无法将其加载到 VS2013 中,并且在任何地方都找不到示例。
有人知道如何仅仅为了文件管理而组合一个空的、与语言无关的项目吗?
我找到了相同的 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>
你基本上是对的:
Visual Studio 项目(即几乎所有现代类型)都是 MSBuild 项目。但是,Visual Studio 仅加载具有扩展的项目。您无法加载任意 MSBuild 项目。 (当然,您始终可以将 MSBuild 文件编辑为 XML。如果它已经作为项目加载,则必须先卸载它才能编辑它。)
对于某些项目类型,您无法添加您想要的任何类型的文件。例如,WiX 项目不允许您添加 T4 模板 (.tt) 文件。这是一个耻辱。但是,您可以编辑项目来添加它们,这不会破坏任何内容。但这实际上取决于项目类型扩展的作者。尽管如此,我还没有找到任何无法添加到 C# 和 Visual Basic .NET 项目中的文件。
正如 SLaks 评论的那样,网站项目确实允许添加任何类型的文件,并且应该适合您的情况。
使用现代 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 "Write-Output HelloWorld"" />
</Target>
</Project>
此解决方案唯一尴尬的方面是必须定义
TargetFramework
属性 ,但希望这可以在某个时候得到解决。