簡體   English   中英

您如何在Visual Studio中的項目/解決方案之間共享代碼?

[英]How do you share code between projects/solutions in Visual Studio?

我有兩個具有一些通用代碼的解決方案,因此我想將其提取出來並在它們之間共享。 此外,我希望能夠獨立發布該庫,因為它可能對其他人有用。

  • 使用Visual Studio 2008的最佳方法是什么?
  • 一個項目中是否存在多個解決方案?
  • 對於單獨的代碼,我是否有單獨的解決方案?
  • 解決方案可以依賴另一個嗎?

您可以在兩個項目之間“鏈接”代碼文件。 右鍵單擊您的項目,選擇“ Add ->“ Existing item ,然后單擊“ Add按鈕旁邊的向下箭頭:

屏幕抓圖

以我的經驗,鏈接比創建庫更簡單。 鏈接的代碼將生成具有單個版本的單個可執行文件。

一個項目可以被多個解決方案引用。

將您的庫或核心代碼放入一個項目,然后在兩個解決方案中都引用該項目。

File > Add > Existing Project...將使您可以將項目添加到當前解決方案中。 只是添加此內容是因為上述帖子均未指出這一點。 這使您可以將同一項目包含在多個解決方案中。

可以在多個解決方案中包含一個項目。 我認為項目沒有概念涉及哪個解決方案。 但是,另一種選擇是使第一個解決方案構建到某個知名的地方,並引用已編譯的二進制文件。 這樣做的缺點是,如果要基於發布配置還是調試配置來引用不同的版本,則需要做一些工作。

我不認為您可以使一個解決方案實際上依賴於另一個解決方案,但是您可以通過自定義腳本以適當的順序執行自動構建。 基本上將您的公共庫當作另一個第三方依賴項(例如NUnit等)對待。

您可以使用以下技術對內聯進行通配符內聯(這是@Andomar解決方案保存在.csproj中的方式)

<Compile Include="..\MySisterProject\**\*.cs">
  <Link>_Inlined\MySisterProject\%(RecursiveDir)%(Filename)%(Extension)</Link>
</Compile>

放入:

    <Visible>false</Visible>

如果要隱藏文件和/或防止擴展通配符包含,請在“虛擬現有項目”文件夾中添加或刪除項目,例如上面的MySisterProject

您只需創建一個單獨的類庫項目來包含通用代碼。 它不一定是使用它的任何解決方案的一部分。 從任何需要它的項目中引用類庫。

唯一的竅門是,您將需要使用文件引用來引用項目,因為它不會成為引用該項目的解決方案的一部分。 這意味着實際的輸出程序集將必須放置在任何構建引用該程序集的項目的人都可以訪問的位置。 例如,這可以通過將程序集放在共享上來完成。

將通用代碼提取到類庫項目中,然后將該類庫項目添加到您的解決方案中。 然后,您可以通過將項目引用添加到該類庫來添加對其他項目中通用代碼的引用。 與二進制/程序集引用相比,具有項目引用的優勢在於,如果將構建配置更改為調試,發布,自定義等,則通用類庫項目也將基於該配置來構建。

您可以在多個解決方案中包含相同的項目,但是可以保證一定會遇到問題(例如,在移動目錄時,相對路徑可能無效)。

經過多年的努力,我終於想出了一個可行的解決方案,但是它要求您使用Subversion進行源代碼控制(這不是一件壞事)

在解決方案的目錄級別,添加一個svn:externals屬性,該屬性指向您要包含在解決方案中的項目。 Subversion將從存儲庫中提取項目,並將其存儲在解決方案文件的子文件夾中。 您的解決方案文件可以簡單地使用相對路徑來引用您的項目。

如果有更多時間,我將詳細解釋。

創建包含所有常用功能的dll類庫是一個好主意。 每個解決方案都可以獨立引用此dll,而與其他解決方案無關。

實際上,這就是我們在我的工作中(以及我相信在許多其他地方)如何組織資源的方式。

順便說一句,解決方案不能明確地依賴另一個解決方案。

您可以托管一個內部NuGet服務器,並共享將在內部和外部在其他項目中共享的公用庫。

進一步閱讀

在跨項目重用代碼時,即當您需要引用和支持不同版本的依賴庫時,最好使用“添加現有文件鏈接”。

否則,如果不復制代碼或在源代碼控制中使用技巧,就很難通過引用不同的外部程序集來創建多個程序集。

我認為維護一個項目進行開發和單元測試,然后在需要創建引用這些外部程序集的不同版本的程序集時,使用現有文件鏈接創建“構建”項目是最容易的。

如果您嘗試在兩種不同的項目類型(即桌面項目和移動項目)之間共享代碼,則可以查看shared solutions文件夾 我必須對當前項目執行此操作,因為移動項目和桌面項目都需要僅在1個文件中的相同類。 如果您采用這種方法,則任何鏈接了文件的項目都可以對其進行更改,並且將根據這些更改來重建所有項目。

涉及的兩個主要步驟是

1-創建一個C ++ dll

在Visual Studio中

New->Project->Class Library in c++ template. Name of project here is first_dll in 
visual studio 2010. Now declare your function as public in first_dll.h file and 
write the code in first_dll.cpp file as shown below.

頭文件代碼

// first_dll.h

using namespace System;

namespace first_dll 
{

public ref class Class1
{
public:
    static double sum(int ,int );
    // TODO: Add your methods for this class here.
};
}

Cpp文件

//first_dll.cpp
#include "stdafx.h"

#include "first_dll.h"

namespace first_dll
{

    double Class1:: sum(int x,int y)
    {
        return x+y;
    }

 }

檢查這個

**Project-> Properties -> Configuration/General -> Configuration Type** 

此選項應為Dynamic Library(.dll)並立即構建解決方案/項目。

Debug文件夾中創建first_dll.dll文件

2-在C#項目中鏈接

打開C#項目

Rightclick on project name in solution explorer -> Add -> References -> Browse to path 
where first_dll.dll is created and add the file.

在C#項目的頂部添加此行

Using first_dll; 

現在可以使用某些函數中的以下語句訪問dll中的函數

double var = Class1.sum(4,5);

我在VS2010的c ++項目中創建了dll,並在VS2013 C#項目中使用了它。

在另一個項目中包含一個項目的類文件的一種更簡單的方法是,在現有解決方案中添加項目,然后在現有項目中添加新項目的DLL引用。 最后,您可以通過在任何類頂部使用using指令對命令進行除法來使用添加的類的方法。

從Visual Studio 2015開始,如果將所有代碼保留在一個解決方案中,則可以通過添加共享項目來共享代碼。 然后為您要在其中使用代碼的每個項目以及正確的using指令添加對該共享項目的引用。

現在您可以使用共享項目

共享項目是在多個應用程序之間共享通用代碼的一種好方法。作為Windows 8.1通用應用程序開發的一部分,我們已經在Visual Studio 2013中體驗過共享項目類型,但是對於Visual Studio 2015,它是一個獨立的新項目模板; 並且我們可以將其與其他類型的應用程序(例如控制台,桌面,電話,商店應用程序等)一起使用。當我們希望在單個平台上跨多個應用程序共享通用代碼,邏輯以及組件時,這種類型的項目非常有用。 。 這也允許訪問特定於平台的API,資產等。

在此處輸入圖片說明

有關更多信息,請檢查

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM