【问题标题】:Giving copy of VS project files to another developer将 VS 项目文件的副本提供给另一个开发人员
【发布时间】:2016-09-29 09:03:44
【问题描述】:

有人可以指出一些在 Visual Studio 中创建 C# 项目的最佳实践,我可以避免将副本发送给其他开发人员导致由于各种设置无法在另一台 PC 上运行而导致无法构建的问题。

例如,如果我在我的 PC 上包含对 dll 的引用,则其他开发人员必须重新执行此操作。

【问题讨论】:

  • 尝试设置本地包管理器,例如NuGet。这将有助于解决该特定问题。或者将dll放在源代码管理中并通过相对路径引用?
  • @Graham 您和其他开发人员之间缺少的东西是代码存储库。如果您熟悉 GIT,请尝试一下,我 99% 确信您的代码会同步,除非你们中的某个人不会提交任何更改
  • 只需将您使用的所有第三方库存储在 Visual Studio 解决方案文件夹中,并使用相对路径引用它们。当然,尽可能始终使用 nuget 包。当然,使用源代码控制系统,不要复制任何东西。
  • @Sherlock 作为一个附带问题,我最近开始使用 C#,我主要是 Java/C++ 开发人员,所以在使用 Java 开发时,我们可以使用 .gitignore 来忽略 classbuild 临时文件。我注意到 C# 没有设置忽略方案,建议只包含基本文件的方法是什么?
  • @Evk 实际上 Visual Studio 可以恢复丢失的包,但大多数时候不要依赖它,这是一种不好的做法。

标签: c# visual-studio


【解决方案1】:
  1. 将您的解决方案存储在某个版本控制系统下,例如 git。
  2. 从此存储中排除所有构建工件。构建工件是在构建过程中创建的任何文件,例如 bin 文件夹、obj 文件夹等。您不想将其存储在源代码管理之下,也不想将其分发给其他开发人员。
  3. 排除所有用户特定的工件,例如 .suo 文件,其中存储了给定解决方案的个人设置、Resharper 工件等。
  4. 排除通过在解决方案文件夹(如果有)中运行您的应用程序而创建的所有临时文件。
  5. 包括您引用的所有第三方库,它们不是 nuget 包。将所有这些库存储在源代码管理下的解决方案文件夹中。
  6. 您可以包含或不包含 nuget 包文件夹。 Visual Studio 可以自行恢复这些包,但有些人认为有一天某些包可能会变得不可用,并且更愿意仍然将这些包存储在源代码管理下。这个决定取决于你。
  7. 有时您的项目包含一些巨大的文件(图形、视频、音频)等等。通常不建议将此类文件存储在 git 等版本控制系统中,因为每次您进行任何更改时,它们都必须存储一份副本。但是,例如 git 为此类文件 (https://git-lfs.github.com/) 提供了单独的存储,建议在这种情况下使用。
  8. 切勿将您的解决方案复制并发送给其他开发人员,仅使用源代码控制。来回复制解决方案及其所有工件可能会导致许多问题。

【讨论】:

  • 通常你对第 8 点是正确的。但我认为值得一提的是,解决方案的手动副本应该遵循与 git 存储库设置相同的逻辑(关于排除文件)。可能存在诸如“在项目完成后将最终源代码发送给客户”之类的情况,其中基于版本控制的分发将是额外的工作。一个干净的方法是使用版本控制定期开发,确保版本控制下的文件足够,并从版本控制当前状态导出一个干净的副本以发送。
  • 也许可以,但是手动排除所有这些文件并不容易,所以如果人们复制并通过 - 他们几乎总是会复制所有内容。
【解决方案2】:

因此,在 Stack Overflow 上的优秀人士给出好的建议之后(我喜欢这个网站)。我想我会尝试一个简单的测试。我在 VS2015 中打开了一个快速的“hello world”控制台应用程序。

进行了“全部保存”,以下是那里的文件:

C:.                                                                                                
│   ConsoleApplication8.sln                                                                        
│                                                                                                  
└───ConsoleApplication8                                                                            
    │   App.config                                                                                 
    │   ConsoleApplication8.csproj                                                                 
    │   Program.cs                                                                                 
    │                                                                                              
    ├───bin                                                                                        
    │   └───Debug                                                                                  
    │           ConsoleApplication8.exe.config                                                     
    │           ConsoleApplication8.vshost.exe                                                     
    │           ConsoleApplication8.vshost.exe.config                                              
    │           ConsoleApplication8.vshost.exe.manifest                                            
    │                                                                                              
    ├───obj                                                                                        
    │   └───Debug                                                                                  
    │       │   ConsoleApplication8.csproj.FileListAbsolute.txt                                    
    │       │   DesignTimeResolveAssemblyReferencesInput.cache                                     
    │       │   TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs                     
    │       │   TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs                     
    │       │   TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs                     
    │       │                                                                                      
    │       └───TempPE                                                                             
    └───Properties                                                                                 
            AssemblyInfo.cs

然后我构建并运行了该项目,这些是之后的文件:

C:.                                                                                                
│   ConsoleApplication8.sln                                                                        
│                                                                                                  
└───ConsoleApplication8                                                                            
    │   App.config                                                                                 
    │   ConsoleApplication8.csproj                                                                 
    │   Program.cs                                                                                 
    │                                                                                              
    ├───bin                                                                                        
    │   └───Debug                                                                                  
    │           ConsoleApplication8.exe                                                            
    │           ConsoleApplication8.exe.config                                                     
    │           ConsoleApplication8.pdb                                                            
    │           ConsoleApplication8.vshost.exe                                                     
    │           ConsoleApplication8.vshost.exe.config                                              
    │           ConsoleApplication8.vshost.exe.manifest                                            
    │                                                                                              
    ├───obj                                                                                        
    │   └───Debug                                                                                  
    │       │   ConsoleApplication8.csproj.FileListAbsolute.txt                                    
    │       │   ConsoleApplication8.csprojResolveAssemblyReference.cache                           
    │       │   ConsoleApplication8.exe                                                            
    │       │   ConsoleApplication8.pdb                                                            
    │       │   DesignTimeResolveAssemblyReferencesInput.cache                                     
    │       │   TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs                     
    │       │   TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs                     
    │       │   TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs                     
    │       │                                                                                      
    │       └───TempPE                                                                             
    └───Properties                                                                                 
            AssemblyInfo.cs

额外的文件是:

ConsoleApplication8\bin\Debug\ConsoleApplication8.exe
ConsoleApplication8\bin\Debug\ConsoleApplication8.pdb
ConsoleApplication8\obj\Debug\ConsoleApplication8.csprojResolveAssemblyReference.cache
ConsoleApplication8\obj\Debug\ConsoleApplication8.exe
ConsoleApplication8\obj\Debug\ConsoleApplication8.pdb

接下来,我删除了 bin 和 obj 文件夹并重新加载了解决方案。 bin 和 obj 文件夹按照构建前的方式重新创建。

太棒了 - 谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    相关资源
    最近更新 更多