C# 找不到grain接口的实现类的类型代码
在microsoft orleans(2014年4月的v0.9预览版)中,您在创建引用orleans grains的azure web api时可能会遇到以下错误: 找不到grain接口的实现类的类型代码:729000394。C# 找不到grain接口的实现类的类型代码,c#,.net,orleans,C#,.net,Orleans,在microsoft orleans(2014年4月的v0.9预览版)中,您在创建引用orleans grains的azure web api时可能会遇到以下错误: 找不到grain接口的实现类的类型代码:729000394。 确保谷物组件正确部署并装载到筒仓中 以下是一些可能产生此错误的示例api代码: public class GrainController: ApiController { public GrainControllerController() { }
确保谷物组件正确部署并装载到筒仓中 以下是一些可能产生此错误的示例api代码:
public class GrainController: ApiController
{
public GrainControllerController() {
}
public async Task<List<Model>> Get() {
var grain = MyGrainFactory.GetGrain(0);
return await grain.GetModels();
}
}
public类GrainController:ApiController
{
公共GrainControllerController(){
}
公共异步任务Get(){
var grain=MyGrainFactory.GetGrain(0);
return wait grain.GetModels();
}
}
以下是一些颗粒代码:
public class MyGrain: Orleans.GrainBase, IMyGrain
{
public Task<List<Model>> GetModels()
{
return Task.FromResult(new List<Model>() {
new Model(){
name="my model name"
}
});
}
}
public interface IMyGrain : Orleans.IGrain
{
Task<List<Model>> GetModel();
}
公共类MyGrain:Orleans.GrainBase,IMyGrain
{
公共任务GetModels()
{
返回Task.FromResult(新列表(){
新型号(){
name=“我的型号名称”
}
});
}
}
公共界面IMyGrain:Orleans.IGrain
{
任务GetModel();
}
要解决此问题:
您必须引用您的粒度实现,以及web api中的接口。在Visual Studio 2013中,您可以通过以下方式执行此操作:
解决方案资源管理器>右键单击api项目>引用>添加引用>解决方案>选择接口和实现
该解决方案适用于代号为Orleans v0.9的2014年4月预览版
编辑:
您可能会因为其他原因遇到此错误。我们不小心从grains项目的.csproj文件中删除了这个
<Import Project="$(OrleansSDK)\Binaries\OrleansClient\Orleans.SDK.targets" />
这会导致多个不同的错误,例如,您的codegen.cs文件可能无法在新版本上重新编译
此外,您可能已将其从.csproj文件中删除:
<PropertyGroup>
<PostBuildEvent>
if exist "$(OrleansSDK)\LocalSilo" (
if not exist "$(OrleansSDK)\LocalSilo\Applications" (md "$(OrleansSDK)\LocalSilo\Applications")
if not exist "$(OrleansSDK)\LocalSilo\Applications\$(RootNamespace)" (md "$(OrleansSDK)\LocalSilo\Applications\$(RootNamespace)")
copy /y *.dll "$(OrleansSDK)\LocalSilo\Applications\$(RootNamespace)\"
copy /y *.pdb "$(OrleansSDK)\LocalSilo\Applications\$(RootNamespace)\"
)
if exist "$(OrleansSDK)\Binaries" (
if not exist "$(OrleansSDK)\Binaries\Applications" (md "$(OrleansSDK)\Binaries\Applications")
if not exist "$(OrleansSDK)\Binaries\Applications\$(RootNamespace)" (md "$(OrleansSDK)\Binaries\Applications\$(RootNamespace)")
copy /y *.dll "$(OrleansSDK)\Binaries\Applications\$(RootNamespace)\"
copy /y *.pdb "$(OrleansSDK)\Binaries\Applications\$(RootNamespace)\"
)
</PostBuildEvent>
</PropertyGroup>
如果存在“$(OrleansSDK)\LocalSilo”(
如果不存在“$(OrleansSDK)\LocalSilo\Applications”(md“$(OrleansSDK)\LocalSilo\Applications”)
如果不存在“$(OrleansSDK)\LocalSilo\Applications\$(RootNamespace)”(md“$(OrleansSDK)\LocalSilo\Applications\$(RootNamespace)”)
复制/y*.dll“$(OrleansSDK)\LocalSilo\Applications\$(RootNamespace)\”
复制/y*.pdb“$(OrleansSDK)\LocalSilo\Applications\$(RootNamespace)\”
)
如果存在“$(OrleansSDK)\Binaries”(
如果不存在“$(OrleansSDK)\Binaries\Applications”(md“$(OrleansSDK)\Binaries\Applications”)
如果不存在“$(OrleansSDK)\Binaries\Applications\$(RootNamespace)”(md“$(OrleansSDK)\Binaries\Applications\$(RootNamespace)”)
复制/y*.dll“$(OrleansSDK)\Binaries\Applications\$(RootNamespace)\”
复制/y*.pdb“$(OrleansSDK)\Binaries\Applications\$(RootNamespace)\”
)
这就是让你在当地的筒仓中运行谷物的原因。希望这有帮助