包使用根名称空间,这是我的主要 class 名称之一
Package uses root namespace that is one of my main class names
我正在为我的项目使用 IronPython。设置如下:
Project.Main
- MyProject.Python
- IronPython package
Project.Main 有一个名为 Community
的 class,它是主要的 classes 之一。 无处不在。
现在 IronPython 有一个叫做 Community 的 namespace。CsharpSqlite 有一个叫做 Sqlite3 的 class。
- 我不需要在我的Project.Main
中引用这个class
- 我没有直接从 MyProject.Main
中的 IronPython 包中使用任何 classes
- 我只在 MyProject.Python.
中引用包装器 classes
我的所有代码都不再编译了,因为我得到:
Error CS0118 'Community' is a namespace but is used like a type
这是一个非常大的项目,我不想开始为我对社区 class 的所有引用添加命名空间前缀。
- 有什么解决方法吗?
- 我可以只将 IronPython 名称空间公开给 MyProject.Python 吗?
- 我尝试了 Aliases 和 PrivateAssets 选项,但我在解决方案资源管理器中收到一个警告符号,它似乎不起作用(仍然是 CS0118)
- 见https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files
示例项目:
https://www.dropbox.com/s/hayi3a4ctrh8rlx/NamespaceProblem.zip?dl=0
更新:
要解决此问题,我们需要编辑 ConsoleApp1.csproj
文件并在底部添加:
<Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
<ItemGroup>
<ReferencePath Condition="'%(FileName)' == 'IronPython.SQLite'">
<Aliases>IronPythonCommunity</Aliases>
</ReferencePath>
</ItemGroup>
</Target>
<!-- </Project> -->
然后我们可以使用以下代码在我们的代码中加载新修改的外部别名:
extern alias IronPythonCommunity;
using Community = MyProject.Python.Community;
using System;
旧:
据我所知,您无法更改导入的 DLL 或 NuGet 的命名空间。通常你想使用 using like
using Community = MyProj.MyProject.Python;
或使用完全限定的命名空间(您可以使用 CTRL+H 将所有出现的 Community
替换为MyProject.Python.Community
):
static void Test(MyProject.Python.Community x)
{
}
我正在为我的项目使用 IronPython。设置如下:
Project.Main
- MyProject.Python
- IronPython package
Project.Main 有一个名为 Community
的 class,它是主要的 classes 之一。 无处不在。
现在 IronPython 有一个叫做 Community 的 namespace。CsharpSqlite 有一个叫做 Sqlite3 的 class。
- 我不需要在我的Project.Main 中引用这个class
- 我没有直接从 MyProject.Main 中的 IronPython 包中使用任何 classes
- 我只在 MyProject.Python. 中引用包装器 classes
我的所有代码都不再编译了,因为我得到:
Error CS0118 'Community' is a namespace but is used like a type
这是一个非常大的项目,我不想开始为我对社区 class 的所有引用添加命名空间前缀。
- 有什么解决方法吗?
- 我可以只将 IronPython 名称空间公开给 MyProject.Python 吗?
- 我尝试了 Aliases 和 PrivateAssets 选项,但我在解决方案资源管理器中收到一个警告符号,它似乎不起作用(仍然是 CS0118)
- 见https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files
示例项目:
https://www.dropbox.com/s/hayi3a4ctrh8rlx/NamespaceProblem.zip?dl=0
更新:
要解决此问题,我们需要编辑 ConsoleApp1.csproj
文件并在底部添加:
<Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
<ItemGroup>
<ReferencePath Condition="'%(FileName)' == 'IronPython.SQLite'">
<Aliases>IronPythonCommunity</Aliases>
</ReferencePath>
</ItemGroup>
</Target>
<!-- </Project> -->
然后我们可以使用以下代码在我们的代码中加载新修改的外部别名:
extern alias IronPythonCommunity;
using Community = MyProject.Python.Community;
using System;
旧:
据我所知,您无法更改导入的 DLL 或 NuGet 的命名空间。通常你想使用 using like
using Community = MyProj.MyProject.Python;
或使用完全限定的命名空间(您可以使用 CTRL+H 将所有出现的 Community
替换为MyProject.Python.Community
):
static void Test(MyProject.Python.Community x)
{
}