部署和引用XSLT文件的最佳方法

时间:2008-11-03 10:36:52

标签: visual-studio

在Visual Studio项目中,我有三个层,数据层,业务层和表示层。

在数据层中我有一些XSLT将一些对象转换为电子邮件,一切正常,但我发现在构建时不会构建/复制XSLT。

我目前在部署位置创建了一个文件夹并放置了XSLT,但我担心依赖手动过程来更新这些文件夹。

有没有人遇到过类似的问题,如果有的话,他们是怎么解决的。

有必要更改MSBuild脚本以将构建工件复制到所需位置,是否有人有此示例?

Thaks

4 个答案:

答案 0 :(得分:4)

如果您使用的是Visual Studio 2005/2008,最简单的方法是将XSLT文件包含为项目资源。

  1. 打开项目的属性。
  2. 选择“资源”选项卡。您可能会看到一个链接,指出“此项目不包含默认资源文件。单击此处创建一个。”来吧,点击它。
  3. 单击顶部附近的“添加资源”下拉列表,然后选择“添加现有文件”。
  4. 浏览到您的XSLT文件并选择它们。
  5. 完成此操作后,您可以通过以下方式轻松访问资源:

    // To get the contents of the resource as a string:
    string xslt = global::MyNamespace.Properties.Resources.MyXsltFile;
    // To get a Stream containing the resource:
    Stream xsltStream = global::MyNamespace.Properties.Resources.ResourceManager.GetStream("MyXsltFile");
    


    如果您使用的是Visual Studio 2003,最好将这些XSLT文件包含为DLL的嵌入式资源。在Visual Studio中,在“解决方案资源管理器”中选择文件,打开“属性”窗格,然后将“构建类型”更改为“嵌入式资源”。然后,您可以使用GetManifestResourceStream method获取包含XSLT的Stream。要传递的名称将基于程序集的默认命名空间,包含该文件的文件夹以及文件名。

    例如,假设您的数据层程序集具有My.DataLayer的默认名称空间。在数据层项目中,您有一个名为Templates的文件夹,其中包含一个名为Transform.xslt的文件。获取XSLT的代码如下所示:

    // There are numerous ways to get a reference to the Assembly ... this way works
    // when called from a class that is in your data layer.  Have a look also at the
    // static methods available on the Assembly class.
    System.Reflection.Assembly assembly = (GetType()).Assembly;
    System.IO.Stream xsltStream = assembly.GetManifestResourceStream("My.DataLayer.Templates.Transform.xslt");
    

    有关详细信息,请查看this article on CodeProject

答案 1 :(得分:0)

可能有明显的问题,但仍然需要问一下,你是否在项目本身中包含了包含XSLT的文件夹?这是一个网络还是表单应用程序?

答案 2 :(得分:0)

在VS中,很容易将项目中的XSLT文件的属性设置为在构建时复制,默认情况下不会。

答案 3 :(得分:0)

我可能很难解释自己。

数据层是表示层引用的类库。

在构建DataLayer时,我可以将XSLT输出到DataLayer的Bin目录。但是,当我构建和发布表示层时,它正确地抓住了DLL而不是XSLT