我一直在Visual Studio中遇到问题,在该问题中,我在本地Nuget Cache中引用了Nuget软件包,但在Nuget软件包中没有添加作为该项目的Nuget软件包参考。Visual Studio默认为在我的本地文件系统上的软件包中添加提示路径参考,而不是软件包参考。即这个
<ItemGroup>
<Reference Include="Awesome.Package.dll">
<HintPath>local/path/to/NuGet/cache/Awesome.Package.dll</HintPath>
</Reference>
</ItemGroup>
而不是这个
<ItemGroup>
<PackageReference Include="awesome-package" Version="x.y.z" />
</ItemGroup>
现在,我知道如何正确安装Nuget软件包,这不是问题。我想防止Visual Studio/.NET(以责任方为准(到达解决方案的DLL参考。在我的项目中,只有3种有效的参考文献:
- 解决方案中的其他项目
- .NET Core SDK
- 用
<PackageReference>
标签引用的Nuget软件包
如果VS/.NET无法参考这样的代码,则我需要提出错误或以其他方式表示我试图使用的代码不存在。假设可以在感觉到DLL的任何地方都可以伸出手是可以接受的。不良的参考可以承诺,这会导致我的构建系统失败,而其他团队成员在包含不良引用的投入时会遇到错误。*
是否有一种方法可以使白名单/黑名单特定表示Visual Studio和/或.Net Core中引用外部代码的含义?
*是的,我们可以在提交代码或进行PRS时更好地过滤这些问题,但这依赖于人类来捕获错误,这些错误首先是由软件
有没有办法告诉视觉工作室只使用特定种类的 .NET核心解决方案中的参考?
我恐怕答案是负面的。众所周知,VS中没有这样的选择可以以这种方式管理.NET核心项目中的参考。
您遇到的原始问题可能与您消费包装的方式有关。在.NET核心项目中,如果您通过Nuget Package Manager UI
或Package Manager Console
添加对该Nuget软件包的引用,则应是正常的PackageReference
格式。因此,实际上,您需要做的是使用正确的方法消耗Nuget软件包,因为VS不支持您想要的任何选项的行为。
*是的,在提交代码或进行PRS时,我们可以更好地过滤这些问题,但这依赖于人类来捕捉 首先可以阻止的错误 软件
目前,由于VS支持我们以Reference
格式引用正常组件的方案,因此IntelliSense在.NET Core Project Project文件中具有此类参考时不会引起错误。作为替代方案,也许您可以在将其提交回库之前在本地构建项目。
尝试一个Directory.build.props文件。创建一个文本文件并将其重命名为Directory.Build.props
,您可以在其中添加内容,例如:
<Project>
<Target Name="CheckIfThereExistsNotValidReferences" BeforeTargets="build">
<ItemGroup>
<InValidReferences Include="@(Reference)" />
<SdkReferences Include="@(Reference)" Condition="$([System.String]::new('%(Reference.HintPath)').Contains('C:Program FilesdotnetsdkNuGetFallbackFolder'))" />
<InValidReferences Remove="@(SdkReferences)" />
</ItemGroup>
<Message Text="aaaaaaaaa @(InValidReferences)" Importance="high" Condition="'@(InValidReferences)'!=''" />
<Error Text=" Raise the error cause there exists invalid references!" Condition="'@(InValidReferences)'!=''" />
</Target>
</Project>
将此文件放入解决方案目录中,然后将有助于检查项目文件中不需要的参考格式。如果存在,它将引起错误。它在我本地的计算机中起作用。在解决方案目录中,每次您在进行更改之前在本地构建它时,都存在您不喜欢的Reference
格式,构建将失败并引起错误。但这仅是为了构建时间,提出诸如Intellisense方法之类的错误,现在不支持这一点。您可以在开发人员社区中发布Suggest a Feature
请求。希望它有帮助。