Ste*_*Pak 3 .net c# visual-studio nuget
在我的解决方案中,我有一个顶级项目和一堆依赖项目。依赖项目之一需要引用 Nest nuget 包。因此,在解决方案的 nuget 包配置中,我仅将 Nest 安装在引用它的项目上。
顶级项目有对此依赖项目的引用,但没有对 Nest 命名空间的引用。它构建时没有警告或错误,但是,在运行时,我有一个问题说
Could not load file or assembly 'Nest, Version=7.0.0.0, Culture=neutral, PublicKeyToken=96c599bbe3e70f5d' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
当我在顶级项目上手动安装 Nest 包时,它成功且没有问题。
为什么会出现这种情况?在依赖项目上安装 Nest 包不应该解决此依赖关系吗?
依赖项目之一需要引用 Nest nuget 包。
你在依赖项目中调用了Nest的函数吗?如果VS发现依赖项目实际上并不在代码中调用(需要)程序集,则不会将依赖项目的程序集复制到顶级项目中。
为什么会出现这种情况?在依赖项目上安装 Nest 包不应该解决此依赖关系吗?
我不确定问题中提供的信息的原因,许多因素可能会导致奇怪的行为,有时 VS 版本也会影响它......
假设您有一个顶级项目A,并且它取决于B使用Project Reference.
1.如果它们都针对.net framework,请确保它们使用相同的方式来管理nuget包。(都使用packages.config或都使用PackageReference)
2.如果A是.net framework项目,同时B是.net standard项目,请确保A也使用PackageReference格式来管理nuget包。
因为.net standard(新的SDK格式)使用PackageReference包,如果A使用Packages.config和引用B,构建系统将在构建过程中对不同的nuget格式感到困惑。我们不会找到Nest.dll从B's输出文件夹复制到A's输出文件夹的内容。
对于这种情况,尝试添加<RestoreProjectStyle>PackageReference</RestoreProjectStyle>到顶级A的项目文件(xx.csproj)中,这样可以确保A和B都可以恢复为PackageReference样式。
3.如果A是.net framework、packageReference是B,.net framework则Packages.config右键单击packages.config并选择Migrate Package.config to PackageReference按钮。您也可以从此文档中获得一些帮助。
4.如果你的顶级项目是.net core,B项目目标是.net standard,在VS2017中,nest.dll不会被复制到A的输出文件夹中,你可以尝试添加到<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>你的A.csproj来解决这个问题。类似的问题请参见此处。(VS2019 16.3.8已经修复了这个问题,这个问题大多出现在VS2017中)
并且此行为也受VS版本的影响,如果您使用的是VS2017,请将其更新到最新15.9.17以获得更好的体验。如果您使用的是VS2019,请将其更新到16.3.8。
希望能帮助到你 :)
| 归档时间: |
|
| 查看次数: |
2244 次 |
| 最近记录: |