与原始代码相比,Nuget 包命名空间不同
Nuget package namespace is different compared to original code
我正在尝试为我的项目创建基础包。
我想将它们作为 NuGet 包导入。
运行前一切正常。导入自定义 nuget 包很好,引用很好(我猜)并且 Rider 不会抱怨。
在我的代码 运行 之后,我收到一个错误,其中包含以下内容:找不到版本为“1.0.0”的引用包“PACKAGENAME”并抛出 FileNotFoundException。
到目前为止,我得出的结论是,问题出在 NuGet 包命名空间内,我认为我是正确的。
将原始代码与编译后的代码进行比较后,命名空间不匹配。
原码:
namespace Base.Domain.Identity
{
public class BaseUser<TKey> : IdentityUser<TKey>, IDomainEntityId<TKey>
where TKey : IEquatable<TKey>
{
[MaxLength(64)] public string? PictureUrl { get; set; }
[NotMapped]
public string Name
{
get => UserName;
set => UserName = value;
}
}
}
编译代码
#nullable enable
namespace Domain.Identity
{
public class BaseUser<TKey> : IdentityUser<TKey>, IDomainEntityId<TKey> where TKey : IEquatable<TKey>
{
[MaxLength(64)]
public string? PictureUrl { get; set; }
[NotMapped]
public string Name
{
get => this.UserName;
set => this.UserName = value;
}
}
}
如您所见,命名空间不匹配。
到目前为止,我还没有找到一些脚本会声明应该切换名称空间的地方。
我还有另外 3 个具有相同根命名空间的包
例如 Base.SomeOtherPlace
nuspec 文件如下所示:
<?xml version="1.0"?>
<package >
<metadata>
<id>Api-Base-Domain</id>
<version>1.0.0</version>
<authors>Hannes</authors>
<owners>Hannes</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Base libraries for asp-net api domain items</description>
<releaseNotes>Release.</releaseNotes>
<copyright>Copyright 2021</copyright>
<tags>MyTag1</tags>
<dependencies>
<dependency id="Api-Base-Contracts" version="1.0.0"/>
</dependencies>
</metadata>
</package>
Api-Base-Contracts 是我的 Base.Contracts 包。
奇怪的是,只有 Base.Contracts 被正确编译。
该项目的 .nuspec 文件与 Base.Domain 几乎相同,除了依赖项,它具有 none.
我已尝试通过删除 obj 和 bin 文件夹重新加载这两个解决方案(基本解决方案和我使用 NuGet 包的解决方案)。
我正在为 NuGet 使用 dotnet 命令,因为我在 linux.
如何防止编译器更改命名空间?
显然问题出在缓存的 nuget 包上。
在开始构建这些包时,命名空间不同。
Nuget 包缓存在 home/.nuget/packages
中,所以我不得不手动删除那里的旧包。显然重建旧包并将它们导入 rider 不会重写缓存文件夹中的旧包。
所以要解决命名空间错误的大问题,我必须手动删除缓存的包。
我正在尝试为我的项目创建基础包。 我想将它们作为 NuGet 包导入。
运行前一切正常。导入自定义 nuget 包很好,引用很好(我猜)并且 Rider 不会抱怨。
在我的代码 运行 之后,我收到一个错误,其中包含以下内容:找不到版本为“1.0.0”的引用包“PACKAGENAME”并抛出 FileNotFoundException。 到目前为止,我得出的结论是,问题出在 NuGet 包命名空间内,我认为我是正确的。
将原始代码与编译后的代码进行比较后,命名空间不匹配。
原码:
namespace Base.Domain.Identity
{
public class BaseUser<TKey> : IdentityUser<TKey>, IDomainEntityId<TKey>
where TKey : IEquatable<TKey>
{
[MaxLength(64)] public string? PictureUrl { get; set; }
[NotMapped]
public string Name
{
get => UserName;
set => UserName = value;
}
}
}
编译代码
#nullable enable
namespace Domain.Identity
{
public class BaseUser<TKey> : IdentityUser<TKey>, IDomainEntityId<TKey> where TKey : IEquatable<TKey>
{
[MaxLength(64)]
public string? PictureUrl { get; set; }
[NotMapped]
public string Name
{
get => this.UserName;
set => this.UserName = value;
}
}
}
如您所见,命名空间不匹配。 到目前为止,我还没有找到一些脚本会声明应该切换名称空间的地方。
我还有另外 3 个具有相同根命名空间的包
例如 Base.SomeOtherPlace
nuspec 文件如下所示:
<?xml version="1.0"?>
<package >
<metadata>
<id>Api-Base-Domain</id>
<version>1.0.0</version>
<authors>Hannes</authors>
<owners>Hannes</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Base libraries for asp-net api domain items</description>
<releaseNotes>Release.</releaseNotes>
<copyright>Copyright 2021</copyright>
<tags>MyTag1</tags>
<dependencies>
<dependency id="Api-Base-Contracts" version="1.0.0"/>
</dependencies>
</metadata>
</package>
Api-Base-Contracts 是我的 Base.Contracts 包。 奇怪的是,只有 Base.Contracts 被正确编译。 该项目的 .nuspec 文件与 Base.Domain 几乎相同,除了依赖项,它具有 none.
我已尝试通过删除 obj 和 bin 文件夹重新加载这两个解决方案(基本解决方案和我使用 NuGet 包的解决方案)。 我正在为 NuGet 使用 dotnet 命令,因为我在 linux.
如何防止编译器更改命名空间?
显然问题出在缓存的 nuget 包上。 在开始构建这些包时,命名空间不同。
Nuget 包缓存在 home/.nuget/packages
中,所以我不得不手动删除那里的旧包。显然重建旧包并将它们导入 rider 不会重写缓存文件夹中的旧包。
所以要解决命名空间错误的大问题,我必须手动删除缓存的包。