SmallSharp 1.2.0

dotnet add package SmallSharp --version 1.2.0                
NuGet\Install-Package SmallSharp -Version 1.2.0                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块版本的 Install-Package
<PackageReference Include="SmallSharp" Version="1.2.0">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中,以引用代码包。
paket add SmallSharp --version 1.2.0                
#r "nuget: SmallSharp, 1.2.0"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将其复制到交互工具或脚本的源代码中以引用代码包。
// Install SmallSharp as a Cake Addin
#addin nuget:?package=SmallSharp&version=1.2.0

// Install SmallSharp as a Cake Tool
#tool nuget:?package=SmallSharp&version=1.2.0                

在同一个项目中创建、编辑和运行多个 C# 顶级程序 😍

原因

新的 C# 顶级程序 允许快速引发或学习 C# 的一种直观、简单和精简的体验。

自从在 Visual Studio 中引入以来,有一个缺失的功能,就是项目只能有一个这样的顶级程序。这意味着,为了原型设计或学习 .NET 的不同领域,您必须替换之前的主程序,或者以某种方式更改它使其不可编译(例如重命名为 .txt 或更改其构建操作),以便保留它。

SmallSharp 允许您从启动按钮/下拉菜单中选择哪个文件应该是要运行的顶层程序,此外,它将监视您正在编辑的活动文件,并自动将其设置为启动文件!

start button

当您向项目中添加更多 .cs 文件时,此列表会自动与之同步。当您选择一个目标 C# 文件时,它将成为唯一的顶层程序,因此您不需要修改其他任何文件,因为它们会自动变为 None 项。

位于项目目录根目录下的所有编译文件都被视为用于选择和编译的顶层程序。如果您需要在这些程序之间共享代码,可以将它们放在子目录中,它们的行为将与普通编译项目相同。

用法

无需安装任何Visual Studio扩展。SmallSharp通过仅在C#控制台项目中安装SmallSharp nuget包来运行。

  1. 创建一个新的控制台项目

New Project Dialog

默认情况下,这个新的控制台项目可能不会设置为目标net5.0或使用最新的C#版本。因此,单击项目节点,并在编辑器中打开项目文件。确保您做了以下之一:

  • 选择推荐的框架版本(即 net6.0)
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

</Project>
  • 如果您针对其他框架,则使用最新的C#语言版本
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net472</TargetFramework>
    <LangVersion>latest</LangVersion>
  </PropertyGroup>

</Project>
  1. 使用您首选的方法安装SmallSharp nuget包
  • 从“依赖关系”节点,管理NuGet包对话框

New Project Dialog

  • 直接将其添加到.csproj
  <ItemGroup>
    <PackageReference Include="SmallSharp" Version="*" />
  </ItemGroup>
  • 使用dotnet CLI
> dotnet add package SmallSharp
  • 使用包管理器控制台
PM> install-package SmallSharp
  1. 现在打开Program.cs文件,并对新简明的顶级程序进行更改
using System;
using static System.Console;

WriteLine("Hello World!");

添加尽可能多的顶级程序,并通过简单地更改活动文档轻松地在它们之间切换。

Demo

工作原理

此nuget包协同利用编译器、nuget、Visual Studio和MSBuild的以下独立且不相关的功能:

  1. C#编译器仅允许每个编译有一个顶级程序。
  2. 启动配置文件(运行下拉列表中的条目)是从Properties\launchSettings.json文件填充的。
  3. 每次更改时,下拉列表选择将持久保存在以项目命名的文件中,并以“.user”扩展名存储的$(ActiveDebugProfile) MSBuild属性中。
  4. 此文件在NuGet提供的MSBuild目标之前导入。
  5. $(DefaultItemExcludesInProjectFolder) MSBuild属性允许排除项目级的项,这些项由SDK自动添加。

通过组合使用上述功能,SmallSharp基本上执行以下操作:

  • 监控VS中的活动文档,将其作为launchSettings.json配置文件发射,并将其设置为$(ActiveDebugProfile)

  • 排除项目级.cs文件被默认SDK包含作为<Compile>,并显式将其包括为<None>,以便它们显示在解决方案资源管理器中。这可以防止编译器因多个顶级程序而产生错误。

  • 仅显式包括<Compile> $(ActiveDebugProfile)属性值。

这意味着,如果从命令行使用dotnet run,这也将始终保持一致性,因为“主”文件选择是唯一通过MSBuild项目操作来执行的。

最后,还有一些基于COM的神奇之处,可以通过访问活动的Visual Studio IDE(通过DTE)来监视当前打开的源文件,并将其与启动配置文件保持同步。这是纯粹使用公共COM原语和公共VSSDK nuget包及其API来完成的。这使IDE的一些有用集成成为可能,而不需要从市场安装VS扩展,并处理正常运行。

注意:如果活动文档跟踪无法正确初始化,则重新启动Visual Studio几乎总是可以解决问题。一旦开始跟踪,它将始终从那一刻开始保持一致。在出现问题时,始终可用Start下拉菜单作为后备。

赞助商

Clarius Org Kirill Osenkov MFB Technologies, Inc. Stephen Shaw Torutek DRIVE.NET, Inc. Ashley Medway Keith Pickford Thomas Bolon Kori Francis Toni Wenzel Giorgi Dalakishvili Uno Platform Dan Siegel Reuben Swartz Jacob Foshee alternate text is missing from this package README image Eric Johnson Ix Technologies B.V. David JENNI Jonathan Oleg Kyrylchuk Charley Wu Jakob Tikjøb Andersen Seann Alexander Tino Hager Mark Seemann Ken Bonny Simon Cropp agileworks-eu sorahex Zheyu Shen Vezel ChilliCream 4OTC

支持此项目  

了解更多关于GitHub赞助商信息

产品 兼容附加计算目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 已计算。
.NET Framework net461 已计算。  net462 已计算。  net463 已计算。  net47 已计算。  net471 已计算。  net472 已计算。  net48 已计算。  net481 已计算。 
MonoAndroid monoandroid 已计算。 
MonoMac monomac 已计算。 
MonoTouch monotouch 已计算。 
Tizen tizen40 已计算。  tizen60 已计算。 
Xamarin.iOS xamarinios 已计算。 
Xamarin.Mac xamarinmac 已计算。 
Xamarin.TVOS xamarintvos 已计算。 
Xamarin.WatchOS xamarinwatchos 已计算。 
兼容的目标框架
包含的目标框架(在包中)
了解有关 目标框架.NET Standard 的更多信息。

NuGet 包

此包未由任何 NuGet 包使用。

GitHub 仓库

此包未由任何流行的 GitHub 仓库使用。

版本 下载 最后更新
1.2.0 61 7/17/2024
1.1.7 1,159 11/16/2022
1.1.6 293 11/16/2022
1.1.5 499 2/3/2022
1.1.4 411 7/5/2021
1.1.2 334 5/17/2021
1.1.1 338 4/8/2021
1.1.0 340 2/15/2021
1.0.3 314 2/12/2021
1.0.2 303 2/12/2021
1.0.1 397 11/20/2020
1.0.0 416 11/18/2020
0.3.0 394 10/19/2020
0.2.0 388 10/1/2020