【问题标题】:Silverlight Asp.Net project integrationSilverlight Asp.Net 项目集成
【发布时间】:2011-03-22 04:22:58
【问题描述】:

我向我的 ASP.NET 网站添加了一个 Silverlight 应用程序。 Visual Studio 制作了一个新的 silverlight 项目,并将其 xap 添加到我网站项目下的 ClientBin 文件夹中。所以这两个项目都在一个解决方案下。

我的 Silverlight 应用程序应该读取一个 xml 文件,但我无法让它从网站项目下的客户端 bin 文件夹中访问该文件。添加对该项目的引用不起作用,因为它说只能添加对其他 silverlight 应用程序的引用。现在,当文件位于 silverlight 项目下时它可以工作,但当它位于网站项目下时则不行。

如何让它从网站项目中读取文件?

项目结构是

WEBSITE1 (solution)
 -WEBSITE1 (project)
  -ClientBin
   -file0.xml
   -silverlightchart.xap
 -SilverlightChart
   -file1.xml

我可以使用

访问 file1.xml
XDocument document = XDocument.Load("file1.xml");

我想访问 file0.xml,但没有适合我的路径,例如,

XDocument document = XDocument.Load("~/ClientBin/file0.xml");

WEBSITE1 是启动项目

【问题讨论】:

  • 如果我下面的回答没有帮助,请发布您用来访问 xml 文件的代码。

标签: silverlight


【解决方案1】:

您应该能够简单地从 ClientBin 文件夹中读取文件,而无需执行任何特殊操作。我猜我会说您不小心将 Silverlight 应用程序设置为启动项目。在这种情况下,您希望网站成为启动项目,然后将 Silverlight 应用程序测试页面标记为起始页面,或者在浏览器启动后导航到 silverlight 页面。

编辑

您遇到的问题是Load 方法是同步的,但 Silverlight 不支持对 Web 资源的同步访问。因此,仅当 Xap 中的内容可以满足该 Uri 时,将 Uri 传递给 Load 方法才有效。这就是为什么 Silverlight 项目中的 Xml 文件可以工作的原因,因为它最终会出现在 Xap 中。

要从站点获取 Xml,您需要执行以下操作:-

 WebClient client = new WebClient();
 client.DownloadStringCompleted += (s, args) =>
 {
     XDocument document = XDocument.Load(args.result);
     SomeFunctionToContinueWithDocumentProcess(document);
 }
 client.DownloadStringAsync(new Uri("file0.xml", UriKind.Relative);
 // code exits here but _document won't be loaded yet

【讨论】:

  • 我使用 XDocument 文档 = XDocument.Load("chart.xml");当 chart.xml 文件存在于 silverlight 项目中时。从其他项目 clientbin 访问文件的路径应该是什么?谢谢
  • 谢谢安东尼,现在另一种解决方案似乎正在起作用,如果它失败了,我会按照你提到的方式尝试。我将 file0.xml 作为链接添加到 SilverlightChart(添加现有项目 > 下拉添加按钮“添加为链接”)。在更改项目文件夹时,链接似乎是动态更新的,所以理论上这应该可以工作
  • @anon2: 很高兴你让它工作了,通常将 xml 文件放在 silverlight 项目之外的全部意义在于它可以在原位编辑而无需重新- 构建 Xap。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多