4

我試圖阻止Visual Studio覆蓋不應在構建過程中使用的項目的二進制文件夾。成像解決方案如下結構:Visual Studio更新不應該構建的項目的二進制文件

App1 -> LibB -> LibA

每次我試圖建立LibB項目(建設/改造),它在我的App1二進制文件夾代替LibA.dll。真正的問題在於App1LibB所使用的LibA.dll的不同版本。成像我有另一個App2項目:

App1 -> LibB (v2) -> LibA (v2) App2 -> LibB (v2) -> LibA (v2) LibB (v2) -> LibA (v1)

而且現在每次我建立了App1項目它毀了我的App2項目的二進制文件夾,因爲當LibB項目建設其移動LibA.dll (v1)App2二進制文件夾不是預期的行爲。

PS#1:我無法更新LibB (v2)使用LibA (v2)只是因爲它是一個簡單的問題描述,就像我上面描述有很多依賴。我們說這將是我長期的解決方案。

PS#2:如果你試圖建立LibB項目將更新App1App2二進制文件夾與LibA.dll (v1)和破壞兩種應用項目。

ps#3:我重新創建了一個具有類似依賴關係模型的測試解決方案,它工作得很好,所以這是我正試圖解決的現有解決方案的問題。

如何防止Visual Studio從孩子的項目正在興建時更新父項目?

+1

一些隨機點:如果你看看構建配置管理器是一樣的平臺,如x86或任何CPU。除了正常的項目依賴項之外,您的某個項目可能會顯式地將一箇舊的LibA(v1)重新渲染並顯式複製,例如「包含在項目中」,並且您確實希望引用通過項目依賴項進入。如果您在實際項目和解決方案文件中搜索lib名稱作爲字符串,則可能會看到odball「強制」引用或甚至是「Linked」引用。我已經看到了與Winforms一起真正在兩個項目中的情況。 –

回答

1

在Visual Studio中使用項目引用時,Visual Studio的設計使它們保持同步,這是設計。如果您在多個應用程序中共享庫,您應該將它們放在不同的解決方案中,並使用包管理產品(如nuget)管理跨解決方案的依賴關係。

+0

但是爲什麼我無法在我的測試解決方案中重現它。我用類似的依賴關係模型重新創建了一個測試解決方案,它工作得很好,所以這是我正在嘗試解決的現有解決方案的問題。 –

1

如何防止Visual Studio在構建子項目時更新父項目?

每當我構建App1項目時,它會毀掉我的App2項目的二進制文件夾,因爲當LibB項目構建時,它將LibA.dll(v1)移動到我的App2二進制文件夾中,這不是預期的行爲。

我相信這是特意設計的,從來沒有少一個辦法來阻止應用1毀掉你的應用2項目的bin文件夾是使項目文件的副本(.csproj的公司),並改變輸出Bin文件夾中項目屬性。

然後有幾個不同的解決方案文件(.sln)來打開不同版本參考配置的項目。

+0

我試圖用全新的解決方案和項目重現相同的問題 - 無法做到這一點。一切都按預期工作。在我當前的解決方案中,當App2替換App1項目的文件夾中的二進制文件時,很可能會出現一些奇怪的項目依賴項問題。 –

+1

聽起來像一個解決方案被損壞/困惑。刪除.suo文件,乾淨的解決方案或更好的只是使用新的.sln沒有問題 –

1

確保你有你的依賴跨項目排序,你配置管理器設置是正確的解決方案級建立

你總是可以單獨從溶液中以及

0

建造特定工程不要使用項目引用,而不是從一些外部文件夾鏈接庫的編譯的二進制像C:\ DeployedBinaries並在需要時所需的二進制文件複製到C:\ DeployedBinaries手動。

相關問題