昨天发布了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规范文件:
<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打包文件路径: …
是否可以在同一项目的单个目录中包含多个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包然后将其删除.我不愿意这样做,我正在寻找其他选择.
谢谢.
我有一个C#项目,它在我的解决方案中有来自项目的2个项目参考.
它还有来自NuGet存储库中的包的5个NuGet包引用.鉴于.csproj,我如何nuspec使用NuGet Project Explorer工具生成或创建文件?
以及如何验证这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 创建相同的包时,可以正确获取依赖项。任何帮助将不胜感激。
我的示例解决方案> Visual Studio中有2个项目库.我在另一个中直接引用其中一个.当我现在发布我的nuget包时,在依赖概述上我得到了我直接引用的nuget >= 1.0.0.0,当我通过nuget执行它时,引用意味着没有直接引用,因为相同的解决方案我在> =依赖概述下得到正确的版本号.我不会更改默认的依赖行为lowest.我试过的是用依赖项/ references/files元素更新我的nuspec文件,它们都不适用于我.我想在直接引用的nuget中看到相同版本的给定nuget作为依赖.
有没有办法将 NuGet 包打包并推送到特定框架,在我的情况下是 net35?
我想推送一个包,所以当其他人安装它时,它会在他们的packages.config 中显示为 targetFramework="net35"。
我可以在 .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可以支持使用包的元数据变量吗?
我将许多应用程序模型和接口拆分为自己的 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.CityContractsOne并ToolBelt.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) 因此,目前您可以配置分支并提交 .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 包时,如何配置分支和提交?
nuspec ×10
nuget ×9
c# ×3
.net-4.5 ×1
c#-4.0 ×1
csproj ×1
dependencies ×1
dotnet-sdk ×1
msbuild ×1