我在WCF应用程序中返回一个类文件。从wsdl(WCF应用程序)的svcutil.exe生成的类文件AuthenticationService.cs正保存在App_Code中并在我的项目中使用。
public ActionResult ViewName()
{
AuthenicationServiceClient client = new AuthenicationServiceClient("BasicHttpBinding_IAuthenicationService");
IList<CategoryInfo> category = new List<CategoryInfo>();
category = client.GetCategories(0, true);
return View(category);
}
In View
@model CategoryInfo
类CategoryInfo
*错误:
类型'CategoryInfo'存在于'D:\ ProjectName \ Project Path \ bin \ ProjectName.dll'和 C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30309 \ Temporary ASP.NET 文件\根\ 1664c01d_shadow \ b956618 \ 414288438 \ 30335072 \ App_Code.j4b-_1mm.dll *
有没有办法克服这个问题?
答案 0 :(得分:3)
从svcutil.exe生成的类文件AuthenticationService.cs wsdl(WCF应用程序)正在保存在App_Code
中
这就是问题所在。 Web应用程序项目类型(ASP.NET MVC使用的类型)不应使用App_Code
文件夹。它适用于WebSites。因此,将这些类移到其他位置并删除App_Code
文件夹,该文件夹不应出现在预编译的Web应用程序中。请在此处阅读Web应用程序项目类型与网站之间的差异:http://msdn.microsoft.com/en-us/library/dd547590(v=vs.110).aspx
您的代码无效的原因是,当您预编译项目时(因为它是Web应用程序类型),CategoryInfo
类将进入生成的程序集。除了ASP.NET在App_Code
文件夹中的所有内容之外,在运行时生成动态程序集并将它们放在输出中。所以基本上你最终会得到2个包含相同类的程序集。
答案 1 :(得分:0)
回复我自己的问题。
我使用Web服务以及项目文件中的相同CategoryInfo作为参考。通过删除引用并仅从Webservice客户端文件中获取CategoryInfo来消除命名冲突,解决了我的问题。
现在我不再收到错误了。