如何避免我自己的nuget包在安装我的包时覆盖目标项目web.config和global.aspx文件

时间:2015-09-30 15:11:45

标签: asp.net visual-studio-2012 nuget nuget-server nuget-spec

我使用以下步骤创建了一个nuget包。

  1. 首先我创建了一个Asp.net Mvc应用程序
  2. 我使用nuget spec命令
  3. 创建了spec文件
  4. 然后我编辑了$ id $,$ version $,$ author $,$ description $ ect ..
  5. 然后我使用以下命令创建了包。
  6. nuget pack myproject.csproj -Build -Properties Configuration = Release
  7. 创建了一个myproject.1.0.0.0.nupkg
  8. 然后我将文件和过去复制到C:\ LocalNuGetFeed \ myproject.1.0.0.0.nupkg
  9. 我已在VS中配置本地存储库
  10. 我的问题是 当我从任何其他项目安装此软件包时,它会询问以下问题。 但根据我的要求,我不想将此文件移动到目标项目。假设用户给 y 它会覆盖目标项目文件,因为它面临很多参考问题。

    **File Conflict
    File 'Web.config' already exists in project 'CRM'. Do you want to overwrite it?
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [?] Help (default is "N"): 
    
    File Conflict
    File 'Global.asax' already exists in project 'CRM'. Do you want to overwrite it?
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [?] Help (default is "N"):** 
    

    但在我的软件包中,我不想将这两个文件从包中移到目标项目中。

    是否有办法避免将Global.asax和Web.config转换为从包到目标项目。

    在我的.nuspec文件中,我添加了以下行

    <files>  
         <file src="Web.config" target = "" exclude="Web.config"/> 
        <file src="*.asax" target = "" exclude="*.asax"/>
        <file src="Content\*.css" target="Content\" />
        <file src="Scripts\*.js" target="Content\Scripts\" />
      </files>
    

    但它包含内容文件夹中的 web.config 文件和 Global.aspx 文件我的结果包看起来像贝娄

    myproject.1.0.0.0
          >> Content
               ....css
               >>Script
                    ..Js file
               web.config
               Global.asax  
    

3 个答案:

答案 0 :(得分:1)

我使用以下命令来解决这个问题来打包包

nuget pack CrmHtmlController.csproj -IncludeReferencedProjects -Exclude **\*.config;**\*.asax

因此它会从包中排除所有.congig和.asax文件。

答案 1 :(得分:0)

看看你的.nuspec文件。它只是一个XML文件,因此您可以使用任何文本编辑器打开它。了解它如何定义要包含在<package><files>的文件?删除那些您不想要的文件。如果您想使用GUI执行此操作,那么一个方便的工具是NuGet Package Manager

答案 2 :(得分:0)

Nuget在您的包中包含web.config,因为web.config的构建操作是“Content”。这是默认情况下对于asp.net网站的经典发布所必需的。

如果你不想要这个,可能是因为你的程序集只是另一个网站的一个组件,你可以将构建操作更改为“None”,nuget将不再使用它。