<PropertyGroup>
<SolutionFileContent>$([System.IO.File]::ReadAllText($(SolutionPath)))</SolutionFileContent>
<SmartSolutionDir>$([System.IO.Path]::GetDirectoryName( $(SolutionPath) ))</SmartSolutionDir>
<RegexPattern>(?<="[PackageName]", ")(.*)(?=", ")</RegexPattern>
</PropertyGroup>
<ItemGroup>
<!-- Keep the identity of the packagereference -->
<SmartPackageReference Include="@(PackageReference)">
<PackageName>%(Identity)</PackageName>
<InSolution>$(SolutionFileContent.Contains('\%(Identity).csproj'))</InSolution>
</SmartPackageReference>
<!-- Filter them by mapping them to another itemGroup using the WithMetadataValue item function -->
<PackageInSolution Include="@(SmartPackageReference -> WithMetadataValue('InSolution', True) )">
<Pattern>$(RegexPattern.Replace('[PackageName]','%(PackageName)') )</Pattern>
<SmartPath>$([System.Text.RegularExpressions.Regex]::Match( '$(SolutionFileContent)', '%(Pattern)' ))</SmartPath>
</PackageInSolution>
<ProjectReference Include="@(PackageInSolution -> '$(SmartSolutionDir)\%(SmartPath)' )"/>
<!-- Remove the package references that are now referenced as projects -->
<PackageReference Remove="@(PackageInSolution -> '%(PackageName)' )"/>
</ItemGroup>
</When>
2条答案
按热度按时间1zmg4dgp1#
在.NET生态系统中,Maven的大致等价物是NuGet。NuGet文件可以是created,使用IDE或命令行工具,如
dotnet pack
或nuget pack
。NuGet文件只是扩展名为.nupkg
的常规.zip
文件。这些文件可以托管在http://www.nuget.org上,供公众使用。在诸如http://www.myget.org的站点上,或者在private hosted NuGet server上。NuGet工具还可以对包含源代码文件的create debug symbol packages进行调试。调试符号包可以托管在公共或私有符号服务器上,并且可以使用used in Visual Studio来单步调试代码,并在Visual Studio中启用配置选项。
如果您在Visual Studio中打开项目A并启用了automatic package restore,并且该项目与项目B具有package reference,则在生成项目时,它将自动下载项目B的NuGet文件,将其解包到本地NuGet缓存,然后在项目中使用项目B的程序集。
如果Visual Studio是与项目B的确切版本对应的configured correctly to find a debug symbols package,则它将允许调试器单步执行项目B的代码。
AFAIK,打开项目B的代码文件,然后设置断点是不可能的(如果这是错误的,有人会留下注解),您需要在项目A中设置断点,然后当您单步执行到调用/示例化
Car
类的行时,Visual Studio将打开代码文件,以便您可以单步执行它。更新日期:2023年1月15日
注意,上面的符号文档仍然有效,但现在有一个更好的方法。如果NuGet包的作者配置了Source Link,并且代码存在于Git仓库中,IDE可以enable source stepping,代码文件可以直接从资源库下载到IDE的调试器中,这意味着不再需要将源文件打包到符号包中。该特性使用Git提交哈希来确保源代码与二进制文件匹配,即使您稍后升级NuGet包也是如此。
通过在项目文件中包含
<PropertyGroup><IncludeSymbols>true</IncludeSymbols><SymbolPackageFormat>snupkg</SymbolPackageFormat></PropertyGroup>
,符号也已更新为允许.snupkg
file。这种新格式可以直接上载到NuGet,而不必使用第三方符号或自托管服务器进行调试。fruv7luv2#
嗯,实际上是有可能的。但是需要对MSBuild做一些修改。
前提条件:
一步一步:
真
这里发生的是,当所有包引用包含在当前打开的解决方案中时,它们会自动动态地替换为项目引用。
有关更多信息,我还在MSBuild github问题中发布了该解决方案:https://github.com/dotnet/sdk/issues/1151