在Visual Studio项目中,我有三个层,数据层,业务层和表示层。
在数据层中我有一些XSLT将一些对象转换为电子邮件,一切正常,但我发现在构建时不会构建/复制XSLT。
我目前在部署位置创建了一个文件夹并放置了XSLT,但我担心依赖手动过程来更新这些文件夹。
有没有人遇到过类似的问题,如果有的话,他们是怎么解决的。
有必要更改MSBuild脚本以将构建工件复制到所需位置,是否有人有此示例?
Thaks
答案 0 :(得分:4)
如果您使用的是Visual Studio 2005/2008,最简单的方法是将XSLT文件包含为项目资源。
完成此操作后,您可以通过以下方式轻松访问资源:
// 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