asp.net 如何在多个包含nuget引用的解决方案之间共享类源代码?

r8uurelv  于 5个月前  发布在  .NET
关注(0)|答案(1)|浏览(62)

我看到这个问题已经被问过很多次了,但似乎没有一个特别强调我手头的问题。我有一个在两个解决方案之间共享的类库,但它在下载nuget引用时遇到了麻烦。
我有两个使用我的类库的解决方案,让我们称之为solution 1和solution 2。直接进入这些解决方案并试图编译它们会导致以下错误:
“找不到类型或命名空间。”
这似乎是因为当我尝试在解决方案中编译时,不会为类库生成本地包文件夹,因此类库.csproj文件中的以下本地提示路径不正确:

<Hintpath> ..\packages\Dapper.1.60.6\lib\net45\Dapper.dll</HintPath>

字符串
有两个解决方案可以解决这个问题,但都不是最佳的。
1.我必须直接打开公共类库编译代码,然后在上面的提示路径处生成包文件夹。然后我可以返回到solution 1或solution 2,它将编译得很好。
1.我可以在软件包管理器中运行“Update-Package -reinstall”(从solution 1或solution 2),但这会改变提示路径以偏向您运行它的solition。即。这里是.csproj文件中的新提示路径:

<Hintpath> (base directory for solution1/2)\packages\Dapper.1.60.6\lib\net45\Dapper.dll</HintPath>


我想有它,这样当我试图编译我的代码在“solution 1”或“solution 2”的包文件夹得到生成的类库即。路径“..\packages\Dapper.1.60.6\lib\net45\Dapper.dll”。有办法做到这一点吗?

kqqjbcuj

kqqjbcuj1#

我其实找到了一个更好的解决方案,我们可以根据条件添加多个提示路径,比如下面的例子:

<Reference Include="TheAssembly">
    <HintPath Condition="Exists('..\My\Assembly\Path')">..\My\Assembly\Path\TheAssembly.dll</HintPath>
    <HintPath Condition="Exists('..\..\My\Assembly\Path')">..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
    <HintPath Condition="Exists('..\..\..\My\Assembly\Path')">..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
    <HintPath Condition="Exists('..\..\..\..\My\Assembly\Path')">..\..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
    <HintPath Condition="Exists('..\..\..\..\..\My\Assembly\Path')">..\..\..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
    <HintPath Condition="Exists('..\..\..\..\..\..\My\Assembly\Path')">..\..\..\..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
    <HintPath Condition="Exists('..\..\..\..\..\..\..\My\Assembly\Path')">..\..\..\..\..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
    etc...
</Reference>

字符串
从以下问题导出的解决方案:.csproj multiple hint paths for an assembly
正如另一位评论者也提到的,你也可以把公共类库打包成一个nuget包,这将是一个更干净的解决方案。

相关问题