【发布时间】:2023-07-11 07:42:01
【问题描述】:
我有一个简单的 C# 控制台应用程序,它读取指定用户的 XML 文件,对其运行 XSLT 转换,然后输出结果。
当我向用户分发我的应用程序时,我想分发一个 .EXE 文件。我的源代码包含 3 个文件:.csproj 文件、.cs 代码文件和 .xslt 样式表。
如何设置 csproj 以使 .xslt “嵌入”在输出中并且最终用户无法查看或修改?
看起来很简单,但我想不通,而且 Google 也不是很有用。
【问题讨论】:
我有一个简单的 C# 控制台应用程序,它读取指定用户的 XML 文件,对其运行 XSLT 转换,然后输出结果。
当我向用户分发我的应用程序时,我想分发一个 .EXE 文件。我的源代码包含 3 个文件:.csproj 文件、.cs 代码文件和 .xslt 样式表。
如何设置 csproj 以使 .xslt “嵌入”在输出中并且最终用户无法查看或修改?
看起来很简单,但我想不通,而且 Google 也不是很有用。
【问题讨论】:
将文件添加到您的项目中,然后选择文件并转到“属性”窗口(按 F4)。将构建操作设置为“嵌入式资源”。这将导致文件作为资源嵌入到 exe 文件中。
using(Stream strm = Assembly.GetExecutingAssembly().GetManifestResourceStream("YourAssemblyName.filename.xslt"))
using (XmlReader reader = XmlReader.Create(strm))
{
XslTransform transform = new XslTransform();
transform.Load(reader);
// use the XslTransform object
}
【讨论】:
...GetManifestResourceStream("This.is.my.namespace.filename.xslt"))
您可以将它嵌入到您的程序集中。
在您的解决方案中添加文件,将构建操作设置为嵌入式资源。
您需要读取文件的地方使用http://msdn.microsoft.com/en-us/library/xc4235zt.aspxAssembly.GetManifestResourceStream,它将为您提供一个流,您可以将其写入文件或直接使用。
如果您不太确定您的资源有什么名称,我发现Assembly.GetManifestResourceNames 有助于列出所有资源。
【讨论】: