【问题标题】:How to embed an XSLT file in a .NET project to be included in the output .exe?如何将 XSLT 文件嵌入到 .NET 项目中以包含在输出 .exe 中?
【发布时间】:2023-07-11 07:42:01
【问题描述】:

我有一个简单的 C# 控制台应用程序,它读取指定用户的 XML 文件,对其运行 XSLT 转换,然后输出结果。

当我向用户分发我的应用程序时,我想分发一个 .EXE 文件。我的源代码包含 3 个文件:.csproj 文件、.cs 代码文件和 .xslt 样式表。

如何设置 csproj 以使 .xslt “嵌入”在输出中并且最终用户无法查看或修改?

看起来很简单,但我想不通,而且 Google 也不是很有用。

【问题讨论】:

    标签: c# project csproj


    【解决方案1】:

    将文件添加到您的项目中,然后选择文件并转到“属性”窗口(按 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
    }
    

    【讨论】:

    • 为了扩充 Fredrik 的示例,您可以使用应用程序的命名空间作为“YourAssemblyName”,如...GetManifestResourceStream("This.is.my.namespace.filename.xslt"))
    【解决方案2】:

    您可以将它嵌入到您的程序集中。

    在您的解决方案中添加文件,将构建操作设置为嵌入式资源。

    您需要读取文件的地方使用http://msdn.microsoft.com/en-us/library/xc4235zt.aspxAssembly.GetManifestResourceStream,它将为您提供一个流,您可以将其写入文件或直接使用。

    如果您不太确定您的资源有什么名称,我发现Assembly.GetManifestResourceNames 有助于列出所有资源。

    【讨论】: