【问题标题】:Visual Studio 2010: Import csproj into another csproj "injected" via svn-externalsVisual Studio 2010:通过 svn-externals 将 csproj 导入另一个“注入”的 csproj
【发布时间】:2014-03-12 18:31:55
【问题描述】:

我正在寻找一种将 .csproj 文件“导入”到另一个 .csproj 文件的方法。

例如以下场景:

Main.csproj:

<Compile Include="Class1.cs" />
<Compile Include="Class2.cs" />

SubMain.csproj

<Compile Include="Class1.cs" />
<Compile Include="Class2.cs" />
<Compile Include="Class3.cs" />

现在以某种方式从我的“SubMain.csproj”中的“Main.csproj”继承会很好。

在“SubMain.csproj”中可能是这样的:

<Include File="Main.csproj" />
<Compile Include="Class3.cs" />

所以它会自动添加“Main.csproj”中的文件?

Visual Studio 2010 for ASP.Net Web Projects 是否可以做到这一点?

如果没有,是否有针对给定场景的替代解决方案?

谢谢。

编辑我为什么需要它:

就我而言,这两个项目都是 ASP.Net Web 项目 (WebForms)。 “Main.csproj”是基本应用程序。 “SubMain.csproj”是 Web 应用程序的客户特定版本。 (具有与基本应用程序相同的功能 + 一些额外功能或特定功能的一些其他行为)

目前,我只需复制 Main.csproj 并将我的附加文件添加到其中即可。但是这种方法不是很好,并且在将文件添加到 Main.csproj 时也会导致问题,因此它们不会自动出现在我的“SubMain.csproj”中。

【问题讨论】:

  • 为什么?你想完成什么?
  • 我支持 SLaks - 看起来您即将解决引用程序集/库的基本概念。
  • 我更新了描述并描述了我为什么需要这个的背景。
  • 您描述的案例应该由您的源代码版本控制系统中的客户特定分支解决。任何现代 VCS 都将支持这种情况。如果您还没有使用 VCS,这是开始使用 VCS 的好理由。
  • @Filburt:我们已经在使用 SVN。我们有多个 SVN 存储库。一个用于基本版本,一个用于每个客户。基本版本使用 svn externals 添加到客户仓库中。我遇到的问题是 csproj 文件。对于客户版本,我只需复制基本的 csproj 并将客户文件添加到其中。但是当基本项目文件发生变化时,这是一个问题。然后我需要为每个客户合并这些...

标签: c# asp.net visual-studio-2010 svn webforms


【解决方案1】:

Likley 更好的方法是使“Main.csproj”成为“类库”(程序集)并将其添加为对其他项目的引用。

要完全实现您的要求,请使用Import 元素添加共享文件。

通过使用 Import 元素,您可以重用许多项目文件共有的代码。这样可以更轻松地维护代码,因为您对共享代码所做的任何更新都会传播到导入它的所有项目。

按照惯例,共享导入的项目文件保存为 .targets 文件,但它们是标准的 MSBuild 项目文件。 MSBuild 不会阻止您导入具有不同文件扩展名的项目,但我们建议您使用 .targets 扩展名以保持一致性。

<Import Project="mySharedFiles.targets"/>

请注意,Import 将在每个程序集中内置类的副本 - 如果您需要在程序集之间共享类,则可以使用类库方法。

【讨论】:

  • 我无法将其更改为类库,因为它是一个 Web 项目。我已经添加了背景,为什么我要在上面的描述中这样做。
  • @H0ff1:您熟悉虚拟目录和应用程序的概念吗?这可能会帮助你。如果您确实需要将客户特定信息“合并”到基础 Web 应用程序中,那么您将迎来一段有趣的时光。
  • @AlexeiLevenkov: 是否也适用于 asp.net webforms 项目?以及如何生成 .targets 文件?
  • @JohnSaunders:虚拟目录和/或应用程序将如何帮助我?
  • 您可能让每个客户都有自己的虚拟目录/应用程序。
猜你喜欢
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 2016-08-31
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
相关资源
最近更新 更多