<Using />
属性:
<ItemGroup>
<Using Include="Maybe.NonexistenceNamespace" />
<!-- More -->
</ItemGroup>
现在名称空间可能存在于项目中,也可能不存在。但是,如果它不存在,我会收到此编译错误(这是可以理解的)
CS0400 在全局命名空间中找不到类型或命名空间名称“也许”(是否缺少程序集引用?)
如果该命名空间不存在,是否可以告诉 C# 编译器忽略此类指令?
上下文:我在一个单独的
Import.targets
文件中有许多类似的指令,该文件被许多(数百个)项目重复使用。使用 <Import />
将它们导入到最终的生产项目中。少数名称空间丢失的情况很少见,但确实有一些。不幸的是,丢失的命名空间不是唯一的(这个项目可能会丢失这些命名空间,其他项目可能会丢失其他一些命名空间)
现在我使用的解决方法是将
<Using Remove="..."/>
添加到这些项目中,但这很难管理:
<Using Remove="Maybe.NonexistenceNamespace"/>
如果未引用提供命名空间的程序集,则
using
语句将导致 CS0400 错误。您可以禁用 CS0400 错误,但这会适得其反。您想知道参考何时丢失。
问题似乎在于您正在应用所有可能的
using
语句,但并非每个项目都使用每个程序集。
一个给定的程序集可以有多个命名空间,并且命名空间名称和程序集名称之间可能没有关系。
引用的程序集通常通过
ProjectReference
或 PackageReference
添加。不太常见的是,可能有直接的 Reference
。
引用和使用可能应该设置在一起,例如:
<ItemGroup Condition="'$(UseMaybeNonexistenceNamespace)' != ''">
<PackageReference Include="Maybe.NonexistenceNamespace" />
<Using Include="Maybe.NonexistenceNamespace" />
</ItemGroup>
如果您的
Import.targets
文件中有类似上述的代码,则项目可以在 $(UseMaybeNonexistenceNamespace)
的 Import
之前设置 Import.targets
属性,以添加 PackageReference
和全局 Using
。
这仍然不能完全消除管理问题,但我建议“管理问题”是拥有供全局使用的全局文件所固有的。对于给定的项目,参考文献通常不会经常更改。如果每个项目管理自己的引用和使用,并且没有全局文件,那么就不会存在全局文件的协调问题。