servicestack ServiceStack/types/csharp在v5.7中生成无效的属性签名
在升级到ServiceStack v5.7的过程中,NativeTypesService在servicestack ServiceStack/types/csharp在v5.7中生成无效的属性签名,servicestack,servicestack,在升级到ServiceStack v5.7的过程中,NativeTypesService在/types/csharp处生成的文件现在正在生成无效代码。我们使用的是ASP.Net(非核心),.NETFramework 4.7.2 具体而言,引用和字符串长度属性是使用命名参数生成的,当包含在客户机项目中时(使用相同版本的ServiceStack),会导致错误: 我已经检查了CSharpGenerator的相关位,但多年来没有任何变化。我不知所措 如何使用/types/csharpnativetype
/types/csharp
处生成的文件现在正在生成无效代码。我们使用的是ASP.Net(非核心),.NETFramework 4.7.2
具体而言,引用
和字符串长度
属性是使用命名参数生成的,当包含在客户机项目中时(使用相同版本的ServiceStack),会导致错误:
我已经检查了CSharpGenerator
的相关位,但多年来没有任何变化。我不知所措
如何使用/types/csharp
nativetypes服务端点生成有效代码?
我在下面创建了一个最小的示例项目来说明这一点。所有ServiceStack库都是v5.7(文本、接口等)。当我们仅将核心
ServiceStack
降级到v5.6时,将生成预期的输出
v5.6签名
namespace TestTypes
{
[Route("/Child")]
public partial class Child
{
public virtual int Id { get; set; }
[References(typeof(TestTypes.Parent))]
public virtual int ParentId { get; set; }
}
[Route("/Parent")]
public partial class Parent
{
public virtual int Id { get; set; }
[StringLength(100)]
public virtual string Name { get; set; }
}
namespace TestTypes
{
[Route("/Child")]
public partial class Child
{
public virtual int Id { get; set; }
[References(Type=typeof(TestTypes.Parent))]
public virtual int ParentId { get; set; }
}
[Route("/Parent")]
public partial class Parent
{
public virtual int Id { get; set; }
[StringLength(MaximumLength=100)]
public virtual string Name { get; set; }
}
}
}
v5.7签名
namespace TestTypes
{
[Route("/Child")]
public partial class Child
{
public virtual int Id { get; set; }
[References(typeof(TestTypes.Parent))]
public virtual int ParentId { get; set; }
}
[Route("/Parent")]
public partial class Parent
{
public virtual int Id { get; set; }
[StringLength(100)]
public virtual string Name { get; set; }
}
namespace TestTypes
{
[Route("/Child")]
public partial class Child
{
public virtual int Id { get; set; }
[References(Type=typeof(TestTypes.Parent))]
public virtual int ParentId { get; set; }
}
[Route("/Parent")]
public partial class Parent
{
public virtual int Id { get; set; }
[StringLength(MaximumLength=100)]
public virtual string Name { get; set; }
}
}
示例项目
public class AppHost : AppHostBase
{
public AppHost() : base("Test", typeof(MyService).Assembly) { }
public override void Configure(Container container) { }
}
public class MyService : Service
{
public object Get(Parent request) { return null; }
public object Get(Child request) { return null; }
}
[Route("/Parent")]
public class Parent
{
[PrimaryKey]
public int Id { get; set; }
[StringLength(100)]
public string Name { get; set; }
}
[Route("/Child")]
public class Child
{
[PrimaryKey]
public int Id { get; set; }
[References(typeof(Parent))]
public int ParentId { get; set; }
}
这个问题现在应该用最新版本解决。我认为这只是5.7中的一个错误行为。从那以后,它就被修复了。我想我们将降级到5.6,然后等待5.7.1或5.8。您能用重试吗?我从master中获取了最新版本,它成功了。我还喜欢导出的引用现在拥有整个名称空间!不幸的是,无法将MyGet用于我们的CI/CD,但很高兴知道有一个修复程序正在等待。