2013年11月11日星期一

Win8多平台引用配置 - Jesse Jiang

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
Win8多平台引用配置 - Jesse Jiang  阅读原文»

之前移植过DLNA的库,这个库是C++写的,然后我们的项目是C#的。接着很郁闷的事情发生了,主项目引用一个C#的DLL,然后这个DLL引用这个C++/CX封装的库。如果有C++的源代码的话,做项目依赖就很简单。如果是引用DLL的话,切换平台,这些DLL就要被覆盖一遍,而且经常会出现DLL加载失败的错误。
我最初的做法就是把这些DLL 都添加到主项目里面,在属性页中设置复制到输出目录。这种做法有个问题,就是这个DLL无法被添加到引用中。
后来,受到C++项目条件编译的启发,改写了一下C#的项目配置文件,在里面添加Choose节点。有个这个节点,就可以根据不同的平台,引用不同的DLL
<Choose>
<When Condition ="'$(Platform)' == 'ARM'">
<ItemGroup>
<Reference Include="PLTWinRt">
<HintPath>>..\Win8\ReferenceDll\ARM\PLTWinRt.winmd</HintPath>
</Reference>
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<Reference Include="PLTWinRt">
<HintPath>..\Win8\ReferenceDll\X86\PLTWinRt.winmd</HintPath>
</Reference>
</ItemGroup>
</Otherwise>
</Choose>
对于主项目中添加的DLL,我采用预先生成事件命令行,把对应的DLL覆盖一下。
<PropertyGroup Condition=" '$(Platform)' == 'x86'">
<PreBuildEvent>Copy "$(ProjectDir)ReferenceDll\X86\*.*" "$(ProjectDir)"</PreBuildEvent>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'ARM'">
<PreBuildEvent>Copy "$(ProjectDir)ReferenceDll\ARM\*.*" "$(ProjectDir)"</PreBuildEvent>
</PropertyGroup>
这样做法的好处就是可以让所有的DLL和EXE在同一个目录下面,如果采用前面的方式,那这些DLL会在子文件夹中。就可能出现加载不正常的问题。
如何诊断DLL加载是否正常,在Win8这里没有太好的工具去看,depends.exe看不了C#项目的引用,lldasm.exe会看到引用,但是不能确定是否正确加载,Fuslogvw.exe似乎看不到win8项目的DLL引用过程。
一个C++/CX的WinRt组件会有两个文件,一个PpboxRT.winmd和PpboxRT.dll。引用的时候,VS会输出加载winmd文件,如果对应.dll文件引用其他dll文件,其他的dll文件找不到了就会抛出FileNotFoundException 错误。
这个时候,我们要去项目的目录中去找对应的DLL有没有复制到指定目录里 Win8\bin\x86\Debug\AppX
另外,在这个目录里面还有AppxManifest.xml 文件,这个文件中记录着winmd文件和dll文件中的类的关联信息
<Extension Category="windows.activatableClass.inProcessServer">
<InProcessServer>
<Path>PLTWinRt.dll</Path>
<ActivatableClass ActivatableClassId="PLTWinRt.DMR_PositionInfo" ThreadingModel="both" />
<ActivatableClass ActivatableClassId="PLTWinRt.DMR_ConnectionInfo" ThreadingModel="both" />
<ActivatableClass ActivatableClassId="PLTWinRt.DMR_MediaInfo" ThreadingModel="both" />
<ActivatableClass ActivatableClassId="PLTWinRt.MediaController" ThreadingModel="both" />
<ActivatableClass ActivatableClassId="PLTWinRt.DMR_TransportSettings" ThreadingModel="both" />
<ActivatableClass ActivatableClassId="PLTWinRt.DMR_TransportInfo" ThreadingModel="both" />
</InProcessServer>
</Extension>
当然这个节点也可以强行添加到Package.appxmaniest文件中。

本文链接:http://www.cnblogs.com/zjjcy/p/3419243.html,转载请注明。

ASP.NET MVC 5-开始MVC5之旅 - 葡萄城控件技术团队博客  阅读原文»

本教程将使用Visual Studio 2013手把手教你构建一个入门的ASP.NET MVC5 Web应用程序。本教程配套的C#源码工程可通过如下网址下载:C#版本源码链接。同时,请查阅 Building the Chapter Downloads 来完成编译源码和配置数据库。

在本教程中的源码工程,您可在Visual Studio中运行MVC 5应用程序。您也可以使Web应用程序部署到一个托管服务提供商上。微软提供免费的网络托管多达10个网站,free Windows Azure trial account。本教程由Scott Guthrie (twitter @scottgu ), Scott Hanselman (twitter: @shanselman ), and Rick Anderson ( @RickAndMSFT )共同写作完成,由葡萄城控件团队翻译(新浪微博 @葡萄城控件)。

入门

运行 Visual Studio Express 2013 for WebVisual Studio 2013开始这个实例。

Visual Studio是一个IDE集成开发环境。就像您使用Microsoft Word来编写文档,你可以使用集成开发环境(IDE)来创建一个应用程序。在Visual Studio中的一个顶部工具栏中显示了各种不同的选项来供您使用。在IDE中还有一个菜单,提供了另一种方式来执行任务。(例如,您可以不从"开始"页面中,选择"新建项目",您可以使用该菜单,然后选择" 文件">" 新建项目"

clip_image002

创建您的第一个MVC 5应用程序

点击新建工程,在左侧选择Visual C#, 接着选择Web,然后选择ASP.NET Web Application. 命名您的工程为"MvcMovie",然后单击确定.

clip_image004

New ASP.NET Project 对话框, 选择 MVC模板,然后单击确定

clip_image006

Visual Studio 刚刚创建的 ASP.NET MVC 项目使用了默认的模板,所以在当前的工程中您不需要做任何事情!这是一个简单的"Hello World !"工程,并且这也是您开始"MvcMovie"工程的好地方。.

clip_image008

按下键盘快捷键 F5开始启动调试。 F5使得Visual Studio启动IIS Express并运行Web应用程序。然后Visual Studio会启动浏览器并打开应用程序的主页面。请注意,在浏览器的地址栏中会显示localhost:port#而不是像example.com 这样的地址。这是因为 localhost总是会被解析为您自己的本地计算机,在这种情况下,这正是您你刚刚建立的应用程序。当Visual Studio运行一个Web工程时,会使用一个随机端口的Web服务。在下面的图片中,端口号是1234。当您运行该应用程序时,您可能会看到一个不同的端口号。

clip_image010

在默认模板页面的右边,为您提供了"主页(Home)", "关于(About)"和"联系(Contact)"页面。下面的截图没有看到"主页(Home)", "关于(About)"和"联系(Contact)"连接。这取决于你浏览器窗体的大小,你可通过点击右上角导航图标看到这些链接。

clip_image012

clip_image014

同时,默认模板创建的ASP.Net MVC应用程序还提供了注册和登录功能。 接下来的一步是修改此默认应用程序,并了解一些关于ASP.NET MVC的知识。关闭浏览器,让我们修改一些源代码吧。

原文地址:http://www.asp.net/mvc/tutorials/mvc-5/introduction/getting-started


本文链接:http://www.cnblogs.com/powertoolsteam/p/aspnet-mvc5-getting-started.html,转载请注明。

阅读更多内容

没有评论:

发表评论