2017-10-12 81 views
2

我正在寫一個使用ASP.NET Core 2.0的MVC網站。禁用.NET標準2中的傳遞項目引用

在ASP.NET Core項目中(我們稱之爲Web),我在同一個解決方案中引用了.NET Standard 2項目(我們稱它爲Service)。 Service項目也引用瞭解決方案中的第三個.NET Standard 2庫(我們稱之爲Business)。 Business項目聲明瞭一個名爲Model的類型。

的問題是,我可以在Web項目中使用Model(即編譯器看到類型Model,我可以做var a = new Model();)彷彿Web項目中引用Business,但它實際上只需要Service參考。如何隱藏ModelWeb?這是ASP.NET Core 2中的一項新功能還是所有.NET Standard項目都是這樣的?

編輯

按照規定here,這是由於傳遞項目引用這是一個新的「功能」,在.NET標準,但如何解決?

+0

我相信這是新項目格式('project.json'和'csproj'現在)的一個特性。任何嵌套的引用都可以直接在項目中使用(又名[transitive dependencies](https://github.com/dotnet/sdk/issues/200))。您可以嘗試[這種方式](https://github.com/dotnet/project-system/issues/2313)將其關閉以供單個參考。 –

+0

[.Net Core 1.1中的傳遞引用]的可能重複(https://stackoverflow.com/questions/42428571/transitive-references-in-net-core-1-1) –

回答

-1

試圖讓模型類的內部類,而不是一個公共類

+1

如果'Model'在'Business '在'服務'中無法訪問。我沒有投票,但:) – Emad

+1

OP沒有試圖隱藏其他程序集的類,他試圖用.NET Standard/.NET Core項目來模擬* old *行爲(沒有間接的依賴關係)。 –

+1

我現在明白了。感謝您解釋它 –

1

那麼我的問題是,接近一個標記爲複製在這裏,但要解決它需要不同的策略。

感謝來自「Federico Dipuma」的評論和給出的答案here我能解決這個問題。

您應該編輯Service.csproj文件,並添加你不想流向頂部PrivateAssets="All"ProjectReference鍵。

<ItemGroup> 
    <ProjectReference Include="..\Business.csproj" PrivateAssets="All" /> 
</ItemGroup> 
相關問題