1

更新澄清:

我有一个作为 Nuget 包公开的项目。我需要它对我的解决方案程序集公开,但对将使用我的包的人来说是私有的。有没有办法做到这一点?

原始问题:

我正在处理的一个项目目前正在使用 2 个实体项目,它是通过 .Net Standard 2.0 框架编写的:

Contract.csproj
Contract.Internal.csproj

第一个配置为使用私有 Nuget 服务器向消费者公开,而第二个用于我的解决方案项目的内部使用
问题是两者都有几乎相同的类,除了少数仅供我的解决方案内部使用。

有没有办法将它们合并到一个项目中,并将一些类配置为在 NuGet 包中公开而其他类不公开?

我阅读了可以添加到 csproj PackageReference 的 ExcludeAssets/IncludeAssets 标记,但是我看到的文档和所有示例都引用了依赖项及其版本,而不是项目类。

此外,如果您有其他解决方案,您可以以其他方式处理您的项目(或者甚至认为我发现自己的这种情况是错误的)如果您分享您对此的想法,我会非常高兴。

4

3 回答 3

1

如果您想从项目中公开某些类,同时将其他类保留在内部,您可以使用C# 访问修饰符

例如,前缀为 的类internal将仅在您的项目中可见:

internal class Foo { }

public其他人可以访问前缀为的类:

public class Bar { }
于 2021-09-25T08:44:21.440 回答
0

我认为Wouter 的回答应该有助于解决您的问题。但我想强调另一种解决类似问题的方法,将来可能会对您或其他人有所帮助。

由于其中有一个接口/功能Contract.Internal.csproj是 internal 但 in 需要,Contract.csproj因此作为一种可能的解决方案,您可以使用internal修饰符来限制它,而不是将其接口公开。而为了访问那个内部接口Contract.csproj,你可以使用这个答案

您需要做的是通过以下方式Contract.csproj修改AssemblyInfo.cs文件来授予对内部可见性的访问权限:Contract.Internal.csproj

[assembly: InternalsVisibleTo("Contract.Internal")]
于 2021-09-27T06:26:05.650 回答
0

单个包在这里是错误的方法,因为它违反了关注点分离的原则。相反,您应该MyPackage拥有所有公共代码并且旨在供任何人使用,然后为您自己的内部使用提供MyPackage.Private该引用MyPackage。你的用户参考MyPackage,你参考MyPackage.Private,一切都很简单。

于 2021-09-27T06:59:15.330 回答