【问题标题】:Link files from a NuGet package into a project automatically自动将 NuGet 包中的文件链接到项目中
【发布时间】:2023-04-09 16:09:02
【问题描述】:

我有一个相对直接的问题,应该是什么。我有一个 MVC 项目,我想在未来与其他 MVC 项目分享一些共同的观点。

为此,我创建了一个 NuGet 包,并希望将包中的通用视图链接到已安装的项目中。

NuGet 结构:

  • /
    • 构建
      • packageName.props
      • 源/
        • test.cshtml

这是我的“packageName.props”文件:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <None Include="$(MSBuildThisFileDirectory)\src\test.cshtml">
      <Link>Views\Shared\test.cshtml</Link>
    </None>   
  </ItemGroup>  
</Project>

不幸的是,这完全没有任何作用。我可以让文件显示的唯一方法是如果我将副本添加到输出元素,但它不会显示为链接文件,它是一个副本。我真的不想走 powershell 路线,因为这应该可以正常工作。任何帮助将不胜感激。

--只是想澄清一下,我想将文件作为链接添加到项目中,而不是副本。-- --我最初是从这里How to tell nuget to add package resource files as links, and not copy them into project directory得到这个想法的,但他们最终走的是powershell的路线,我不想这样做。--

【问题讨论】:

    标签: asp.net-mvc visual-studio-2013 msbuild nuget


    【解决方案1】:

    来自 NuGet 文档:

    ...您可以布局遵循 NuGet 约定的目录结构。

    • tools - 包的工具文件夹用于存放可从包管理器控制台访问的 powershell 脚本和程序。文件夹复制到目标项目后,添加到`$env:Path (PATH) 环境变量中。
    • lib - 安装包时,lib 文件夹中的程序集(.dll 文件)作为程序集引用添加。
    • content - 安装包时,会将 content 文件夹中的文件复制到应用程序的根目录
    • build - 包的 build 文件夹用于 MSBuild 目标文件,这些文件会自动插入到应用程序的 .csproj 文件中。

    将 Content 文件夹视为目标应用程序的根目录。例如,如果我希望一个包在目标应用程序的 /images 目录中添加图像,请确保将图像放在包的 Content/images 文件夹中。

    问题是您将内容放入构建文件夹(仅适用于MSBuild 目标)。

    build/
        packageName.props
    content/
        Views/
            Shared/
                test.cshtml
    

    我认为在这种情况下不需要您的 packageName.props 文件,因为 NuGet 会自动将内容文件添加到 Visual Studio 项目文件中。

    请注意,使用 NuGet 部署内容并不是一件很实际的事情。如果您在安装后编辑内容,NuGet 将跳过卸载它,在升级 NuGet 包的情况下,它会提示用户是否覆盖更改。由于 NuGet 没有任何“合并冲突”功能,因此这不是一个很好的场景。

    这仅在您部署 jQuery 插件 .js 文件之类的东西时有效,该文件不会在项目内部更改,但可能需要在将来的某个时候更新到更高版本。

    【讨论】:

    • 您好,感谢您的回复。我实际上希望文件只是链接文件,而不是将它们直接复制到项目中。如果您将它们放在 /content 文件夹中,那么它们会被复制,而不是链接。
    • 我明白了。我很确定 NuGet 不支持开箱即用,因为 NuGet 不知道项目文件夹之外的任何内容。这就是为什么每个项目都有一个单独的packages.config 文件。 NuGet 可能不是此任务的正确工具。
    • 嗯,我在帖子中添加了一个相关链接,通过 .props 文件提到了这一点,但最终的解决方案是使用 powershell 完成的,我不想这样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2014-12-01
    • 2021-04-16
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多