标签: nuspec

nuspec contentFiles示例

昨天发布了NuGet 3.3(发行说明),并且支持新的contentFiles元素(docs).但是,我似乎无法让这个工作.

我正在使用NuGet.exe作为构建过程.它更新到v3.3.我还将Visual Studio更新到2015 Update 1并重新启动.

这是我的nuspec文件(Hello.world.nuspec):

<?xml version="1.0" encoding="utf-8"?>
<package>
    <metadata minClientVersion="3.3">
        <id>Hello.world</id>
        <version>1.0.0</version>
        <title>Greeting library</title>
        <authors>Timothy Klenke</authors>
        <description>Greetings for the world</description>
    </metadata>
    <contentFiles>
        <files include="*" />
    </contentFiles> 
</package>
Run Code Online (Sandbox Code Playgroud)

我使用以下命令从命令行运行:

nuget.exe update -Self
nuget.exe pack Hello.world.nuspec
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:

MSBuild自动检测:在'C:\ Program Files(x86)\ MSBuild\14.0\bin'中使用msbuild版本'14 .0'.试图从'Hello.world.nuspec'构建包.元素命名空间"包' http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd具有无效子元素"contentFiles"命名空间" http://schemas.microsoft.com/packaging/ 2010/07/nuspec.xsd '.期望的可能元素列表:名称空间" http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd "中的"文件".

我想我正在运行应该支持新的contentFiles XML元素的所有最新版本,但这些工具似乎并不了解它.我错过了什么?我知道文件包含属性是垃圾,但有人使用新的contentFiles元素有一个完整的示例nuspec文件吗?

nuget nuspec

6
推荐指数
1
解决办法
9316
查看次数

Nuget文件被打包到错误的地方

我有一个带有文件规范的nuget规范文件:

   <files>
     <file src="content\App_Start\*" target="content\App_Start" />
     <file src="content\Views\*" target="content\Views" />
     <file src="content\web.config.transform" target="content" />
     <file src="readme.txt" target="" />
   </files>
Run Code Online (Sandbox Code Playgroud)

这曾经是:

   <files>
     <file src="content\*" target="content" />
     <file src="readme.txt" target="" />
   </files>
Run Code Online (Sandbox Code Playgroud)

但这也有奇怪的行为(特别是App_Start没有被包括在内,虽然额外的内容文件夹仍在为视图添加...见下面的说明)

项目本身按照格式排列

 \<root>
 |_ readme.txt
 |_ content
      |_ Views
      |    |_ Home
      |         |_ <viewname>.cshtml
      |         |_ <viewname2>.cshtml
      |_ App_Start
           |_ <PreprocessFilename>.cs.pp
Run Code Online (Sandbox Code Playgroud)

然而,对我来说似乎奇怪的行为是NuGet包正在生成一个具有以下结构的zip文件:

 \<root>
 |_ readme.txt
 |_ content
      |_ content
      |    |_ Views
      |         |_ Home
      |              |_ <viewname>.cshtml
      |              |_ <viewname2>.cshtml
      |_ App_Start
      |    |_ <PreprocessFilename>.cs.pp
      |_ readme.txt
Run Code Online (Sandbox Code Playgroud)

所以关于nuget打包文件路径: …

nuget nuget-package nuspec

5
推荐指数
1
解决办法
974
查看次数

项目目录中有多个.nuspec文件?

是否可以在同一项目的单个目录中包含多个nuspec文件,并且仍然能够合并项目和指定的nuspec文件.

我想知道这样的事情是否可行:

nuget pack MyProject.csproj MyProject-x86.nuspec -prop Configuration=Release;Platform="x86"
nuget pack MyProject.csproj MyProject-AnyCpu.nuspec prop Configuration=Release
Run Code Online (Sandbox Code Playgroud)

我需要能够使用多个构建配置发布我的项目,因此我需要创建不同的包.

我最后的办法是在构建时复制csproj文件,例如将其重命名为"MyProject-x86.csproj",运行nuget包然后将其删除.我不愿意这样做,我正在寻找其他选择.

谢谢.

nuget nuspec

5
推荐指数
1
解决办法
978
查看次数

使用GUI从csproj创建一个nuspec

我有一个C#项目,它在我的解决方案中有来自项目的2个项目参考.

它还有来自NuGet存储库中的包的5个NuGet包引用.鉴于.csproj,我如何nuspec使用NuGet Project Explorer工具生成或创建文件?

以及如何验证这nuspec是否确实正确?

nuget nuget-package c#-4.0 nuspec .net-4.5

5
推荐指数
1
解决办法
8804
查看次数

NuGet - 使用“每次构建后创建新的 NuGet 包”包时在 .nuspec 文件中添加组依赖项

我正在使用 Daniel Schroeder 的“每次构建后从项目创建新的 NuGet 包”NuGet 包,通过 Visual Studio 2013 自动从我的项目创建 NuGet 包。在 .nuspec 文件中指定组依赖项时,我遇到了问题。这是我的 .nuspec 文件中的内容:

<dependencies>
   <group targetFramework=".NETFramework3.5">
        <dependency id="BitMiracle.LibTiff.NET" version="2.4.500.0" />
   </group>
   <group targetFramework=".NETFramework3.5">
       <dependency id="FAImage.Net35" version="1.0.0" />
   </group>
   <group targetFramework="Silverlight5.0">
      <dependency id="FAImage.SL50" version="1.0.0" />
  </group>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

依赖项包含在包中,但它们不依赖于 .nuspec 文件标记中指定的特定平台。它们都被列为“非特定于框架”。通过 NuGet Package Explorer 创建相同的包时,可以正确获取依赖项。任何帮助将不胜感激。

dependencies nuget nuspec

5
推荐指数
1
解决办法
6383
查看次数

NuGet将项目引用定义为版本化依赖项

我的示例解决方案> Visual Studio中有2个项目库.我在另一个中直接引用其中一个.当我现在发布我的nuget包时,在依赖概述上我得到了我直接引用的nuget >= 1.0.0.0,当我通过nuget执行它时,引用意味着没有直接引用,因为相同的解决方案我在> =依赖概述下得到正确的版本号.我不会更改默认的依赖行为lowest.我试过的是用依赖项/ references/files元素更新我的nuspec文件,它们都不适用于我.我想在直接引用的nuget中看到相同版本的给定nuget作为依赖.

c# visual-studio nuget nuget-package nuspec

5
推荐指数
1
解决办法
501
查看次数

针对 .nuspec 中 NuGet 包的特定框架

有没有办法将 NuGet 包打包并推送到特定框架,在我的情况下是 net35?

我想推送一个包,所以当其他人安装它时,它会在他们的packages.config 中显示为 targetFramework="net35"。

我可以在 .nuspec 中指定它吗?

nuget nuspec

5
推荐指数
1
解决办法
3178
查看次数

Msbuild v15无法解析nuspec文件的元数据变量

我知道自从msbuild 15(vs 2017)发布以来,NuGet现已完全集成到MSBuild中.

我有一个nuspec文件,包含定义包属性的变量,如:

    <metadata>
        <id>$id$</id>
        <version>$version$</version>  
        <authors>$authors$</authors>
    ...
    </metadata> 
Run Code Online (Sandbox Code Playgroud)

nuspec文件位于项目的同一文件夹中.

使用nuget工具创建包时,它工作正常.

    nuget pack   
Run Code Online (Sandbox Code Playgroud)

使用msbuild v15时,会引发异常.

运行命令:

    msbuild -version
Run Code Online (Sandbox Code Playgroud)

适用于.NET Framework 15.8.168.64424的Microsoft(R)Build Engine版本15.8.168 + ga8fba1ebd7

    msbuild  /t:pack /p:configuration=release    /p:NuspecFile=mylib.nuspec
Run Code Online (Sandbox Code Playgroud)

提出异常:

C:\ Program Files\dotnet\sdk\2.1.402\Sdks\NuGet.Build.Tasks.Pack\build\NuGet.Build.Tasks.Pack.targets(199,5):错误:值不能为null或为空串.

奇怪的是,dotnet sdk版本2.1.402引发了异常.

我尝试使用vs2017安装msbuild及其路径,并且它也引发了相同的异常.

当我用其值替换变量时,msbuild工作正常.

这个问题

这是msbuild版本15.8.168.64424中的错误还是我错过了什么?

换句话说,msbuild可以支持使用包的元数据变量吗?

c# msbuild nuget nuspec dotnet-sdk

5
推荐指数
1
解决办法
265
查看次数

NuGet 依赖策略

我将许多应用程序模型和接口拆分为自己的 nuGet 包。

问题是:在创建有关依赖项定义的 nuGet 包时,是否有任何好的实践推荐策略?

有时 apackage A取决于 a package B。如果我没有package B在我的 nuspec 上声明特定版本package A,当我稍后在任何解决方案中导入package AnuGet 包时,它可能会在运行时失败,因为子依赖项不可用。

有时依赖树甚至会更深。但如果我明确地将依赖项添加到每个 nuspec 文件中,那么我稍后可能会发现版本冲突。

问题是:如果一切都在我的控制之下,处理这些事情的推荐策略是什么?我是否应该只在项目的依赖项“不明显”时指定依赖项(例如:导入 nuGet 包装器的项目在运行时需要但不直接使用的第三方库)?我应该总是这样做,然后以不同的方式处理版本冲突吗?任何有关这方面的良好信息来源将不胜感激,因为我找到了几个例子,但没有推荐某种特定的做事方式。

附件:我创建 nuGet 包的方式是包含我手动编辑的 nuspec 文件。例如,如果我有以下解决方案结构:

ToolBelt.CityContracts.sln
-ToolBelt.CityContracts.NuGet
--ToolBelt.CityContracts.NuGet.nuspec
-ToolBelt.CityContractsOne
-ToolBelt.CityContractsTwo
Run Code Online (Sandbox Code Playgroud)

ToolBelt.CityContractsOne我有ToolBelt.CityContractsTwo我的 C# 源文件。在ToolBelt.CityContracts.NuGet项目中,我添加了一个引用ToolBelt.CityContractsOneToolBelt.CityContractsTwo确保 nuspec“知道”源文件在哪里。

然后 nuspec 看起来像这样:

ToolBelt.CityContracts.sln
-ToolBelt.CityContracts.NuGet
--ToolBelt.CityContracts.NuGet.nuspec
-ToolBelt.CityContractsOne
-ToolBelt.CityContractsTwo
Run Code Online (Sandbox Code Playgroud)

直到这里一切都很标准。

nupkgs然后我使用 nuget 命令工具在使用以下命令调用的文件夹内生成 nuget 包:

nuget pack ToolBelt.CityContracts.NuGet.nuspec -Version $VERSION -OutputDirectory nupkgs -Prop …
Run Code Online (Sandbox Code Playgroud)

c# nuget nuget-package nuspec

5
推荐指数
1
解决办法
1547
查看次数

如何在 csproj 中指定提交和分支以创建 nuget 包

因此,目前您可以配置分支并提交 .nuspec(请参阅参考资料):

<repository type="git" 
            url="https://github.com/NuGet/NuGet.Client.git" 
            branch="dev" 
            commit="e1c65e4524cd70ee6e22abe33e6cb6ec73938cb3" />
Run Code Online (Sandbox Code Playgroud)

但是我们如何从 SDK 样式的 .csproj 文件中配置它呢?目前我有类型和网址:

<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/NLog/NLog.git</RepositoryUrl>
Run Code Online (Sandbox Code Playgroud)

我找不到“分支”和“提交”的正确元素或属性。它也不在此页面上:MSDN - Additions to the csproj format for .NET Core

那么在从 sdk 样式的 csproj 创建 nuget 包时,如何配置分支和提交?

csproj nuget-package nuspec

5
推荐指数
1
解决办法
725
查看次数