Nuget包-引用程序集未被包含作为项目引用

5
在我开始讲问题之前,让我快速解释一下我的目标:
我有一个模板项目,用于构建每个网站,其中包括基础类、常见页面(例如联系我们)、有用的工具(异常日志记录)等。我想使这个模板可重复使用和更新。之前我使用的是Visual Studio项目模板,但我在引用所需的所有程序集方面遇到了问题,因此我转向了Nuget。我认为这样会更容易,并提供额外的好处。
问题是:
我无法弄清楚如何创建一个Nuget包,该包将包含所有引用(包括解决方案中的其他项目和本地机器上的dll),并使它们成为安装此模板的子项目的依赖项。
这是我所做的:
a. 在项目的nuspec文件中,我有以下内容:
<references>
  <reference file="AjaxControlToolkit.dll" /> <!-- nuget dependency -->
  <reference file="BjxContacts.Shared.dll" /> <!-- project dependency -->
  <reference file="SomeExample.exe" /> <!-- exe local file dependency -->
  <reference file="SomeOther.dll" />  <!-- dll local file dependency -->
</references>
<files>
    <file src="bin\*.pdb" target="lib" /> 
    <file src="bin\*.dll" target="lib"/>
    <file src="bin\*.exe" target="lib"/>
    <file src="bin\*.xml" target="lib"/>
</files>
b. 运行pack命令时,我使用以下命令:nuget pack {projectname}.csproj - IncludeReferencedProjects -Symbols c. 输出结果是两个独立的项目,一个带有.symbols,一个没有,如Package Explorer中所示: 两个项目: enter image description here symbols pkg: enter image description here 此时,感觉一切都做得没问题。 但是,一旦我在Visual Studio中创建一个新的空Web应用程序并安装此软件包,这些引用的程序集或项目都不包括在引用中: d. 在Visual Studio中的新(子)项目中: enter image description here 我已经遇到了完全的瓶颈。 我已经在网上搜索了几天,发现了一堆看起来可能有用的东西,但都走了死胡同: 我错在哪里了? 更新 在.net451文件夹中,它添加了所有外部项目引用。 但是,如WebApplication截图所示,这些引用也没有被添加。 enter image description here
(来源:blabberjax.com)

在 .nupkg 文件中的 lib\net451 文件夹中有什么?我猜应该把程序集放在那里,但是你的 .nuspec 文件只是把它们放在了 lib 目录中。我猜 NuGet 找到了 lib\net451 目录,并忽略了父目录 lib 中的程序集。如果 lib\net451 文件夹中的所有程序集都将被引用,则不需要引用部分。如果您正在使用 nuget pack .csproj,则可以从 .nuspec 文件中删除文件部分。 - Matt Ward
嘿@MattWard,项目引用正在进入该文件夹,但它们也没有被添加为正在创建的子项目的引用。还有其他想法是什么可能会阻止子项目将这些内容作为引用?此外,我尝试将文件路径更改为target="lib\net451",但仍然无法正常工作。 - pharophy
1个回答

2

好的,经过尝试了解所有可能的方法后,我认为问题可能与我的主项目、Nuget包和子项目使用相同的名称有关 - (例如,MyProject.csproj 和 package MyProject.#.#.#)。

看起来引用可能已经被子项目的 .csproj 文件中的 MyProject.csproj 文件从 Nuget 包中本地 ../ 引用覆盖。因此,我在 nuspec 中将 Nuget 包的 id 重命名为 <id>$id$.Client</id>,然后一切都开始正常工作。


此外,请确保 .nuget 包中的 DLL(它只是一个 zip 文件)位于实际的 /lib 文件夹中。否则,您必须根据各个 DLL 的位置调整源代码。 - user3638471

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接