【发布时间】:2020-05-20 03:54:11
【问题描述】:
有没有办法避免 nuget 包引用以简化开发人员机器上的开发?
我们目前正准备将我们“shared”解决方案中的一些项目移动到新 csproj 文件结构(使用<Project Sdk="Microsoft.NET.Sdk">)并使用<TargetFramework>netstandard2.0</TargetFramework> .
通过这样做,我们必须包含<PackageReference Include="System.Text.Encodings.Web" Version="4.7.0" /> 并更改我们共享解决方案的项目“S”中的一些代码。
在另一个解决方案后端中,我们有多个项目。其中一些通过使用对S.dll 的程序集引用来引用项目S 的程序集,如下所示:
<Reference Include="ournamespace.S">
<HintPath>..\..\artifacts\Shared\ournamespace.S\ournamespace.S.dll</HintPath>
</Reference>
当我们构建一切正常时。但是,当从 backend 解决方案运行我们的 Web 应用程序 W 时,我们会遇到以下异常:
System.IO.FileNotFoundException: Could not load file or assembly 'System.Text.Encodings.Web, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The system cannot find the file specified.
之前在使用 .netstandard2.0(我们使用 .net framework 4.7.2 ) 并且在我们将包引用切换到 System.Text.Encodings.Web(我们使用的是<PackageReference Include="AntiXSS" Version="4.3.0" />)之前,我们没有收到任何错误。
我能想到的唯一方法是我们需要从 S.dll 的程序集引用切换到使用 nuget - 以获取 S 依赖项。
但是,为我们的共享解决方案项目使用 nuget 包并在后端项目中进行开发将成为一场噩梦,因为我们需要创建一个新的 nuget 包(并发布它) S 的每次更改,并且需要一直增加 backend 项目中包引用中的版本号。这也将变得非常不切实际,因为我们的开发人员也在使用各种 git 功能分支(考虑版本控制冲突;必须发布未完成的包,并且可能使用版本后缀“alpha_”+{branchName} 来区分该版本来自的分支) .
如何在 localhost 上开发?有没有办法避免 nuget(但要正确解决它的依赖关系!)?
我已经阅读了有关本地开发的程序集引用,同时通过在 csproj 文件中使用条件来使用 nuget 包引用进行 CI 构建(但这也不适用于 VS2017;这也不能解决我们的问题上面写在localhost上的依赖问题)
还有哪些其他可能性?有没有最好的方法来处理这个问题?
提前致谢!
附:我不想通过在那里使用包引用将 S 的依赖项包含到每个引用 S 的项目中。当 S 可能出于任何原因获得新的依赖项时,这不是一个解决方案并且变得更加麻烦。
【问题讨论】:
标签: c# .net dependencies nuget .net-assembly