C# 如何在多个VisualStudio项目中组织javascript

C# 如何在多个VisualStudio项目中组织javascript,c#,javascript,svn,visual-studio-2012,typescript,C#,Javascript,Svn,Visual Studio 2012,Typescript,在我们的VS2012解决方案中,我们有多个web应用程序都需要javascript。我们使用Telerik针对MVC4 ASP.Net的剑道UI,结合jQuery和TypeScript开发了一个单页应用程序 由于有多个Web应用程序,我们创建了大量冗余的TypeScript,从而创建了Javascript。更改代码是一种阻力。我们必须始终同步所有Web应用程序的所有代码,至少可以说这很烦人 我已经研究了这个问题的几种解决方案,结果都是空的。以下是我调查的一些场景: Visual Studio中的

在我们的VS2012解决方案中,我们有多个web应用程序都需要javascript。我们使用Telerik针对MVC4 ASP.Net的剑道UI,结合jQuery和TypeScript开发了一个单页应用程序

由于有多个Web应用程序,我们创建了大量冗余的TypeScript,从而创建了Javascript。更改代码是一种阻力。我们必须始终同步所有Web应用程序的所有代码,至少可以说这很烦人

我已经研究了这个问题的几种解决方案,结果都是空的。以下是我调查的一些场景:

Visual Studio中的链接

可以按住Alt键将整个“文件夹”从一个项目拖到另一个项目。这将在该目标项目中为源项目中的所有文件创建链接。这在VisualStudio中可以很好地进行编辑。这里的问题是,在运行时,应用程序需要文件位于正在执行的web应用程序层次结构中的磁盘位置。因为它们是指向其他位置的链接,服务器无法找到这些文件

放弃了这个解决方案

磁盘上的符号链接

在windows中使用“mklink”命令可以创建所谓的“符号链接”。这在VisualStudio中很有魅力。通过将现有(符号)目录从文件资源管理器拖动到Web应用程序的树中,可以将它们添加到visual studio中。然后可以编辑文件,更改将立即反映在原始位置。我们用它运行项目,并认为我们已经找到了问题的解决方案,直到我们想将其检查到Subversion。Subversion认为它是一个真实的文件夹,并尝试使用原始位置的版本信息检入文件。经过几个小时令人沮丧的反复试验,我也放弃了这个解决方案。我们尝试了符号链接和连接点,但在这两种情况下我们都无法实现

放弃了这个解决方案

更多调查

我还研究了ASP.Net应用程序中使用WebResources.asxd和JavaScript作为嵌入资源的解决方案。我们也放弃了这一点,因为从增加的复杂性来看,它会在开发过程中过多地增加我们的循环时间。我们必须为某些JavaScript文件中的每个更改构建解决方案,这样我们就失去了现在拥有的非常快速的编辑可能性。我们现在可以简单地更改JavaScript,将其保存到磁盘,并刷新浏览器以使更改变为活动状态


上面我们最喜欢的选项是带有符号链接的选项,但是我们还没有找到解决SubVersion问题的方法。

您是否考虑过为javascript创建一个NuGet包?这是一种很好的管理依赖关系的方法,您可以为此进行调整


如果您使用git进行版本控制,我会建议您使用子模块。AFAIK svn没有等效项。更正:参见@ Barrp的回答。

< P>如果您想在SytRepe存储库中有类似SyLink的引用,则应该明确地考虑<代码> Sn:Extruts < /C> >:

  • ,

通过这种方式,您可以创建指向通用代码的链接。

我们遇到了类似的问题,只是我们在一个项目中从T4模板生成了一个TypeScript文件,并且需要在我们的Web项目中引用该文件。我们尝试了链接文件,但遇到了相同的问题


我们最后做的是使用预构建事件将文件从一个文件夹复制到另一个文件夹。现在,我们正在使用TFS,它将在复制时自动签出目标文件。我们确实将这两个文件都置于源代码管理之下,这有点浪费,但在我们的例子中,共享代码的好处超过了这一点。你的里程数可能会有所不同。

有趣的问题,我知道我去派对晚了一点,但这是我对这个问题的看法

使用私人NPM回购

创建一个TS项目,将所有公共代码作为NPM包发布到专用NPM服务器(如果您不希望它是公共的),否则,您可以始终将其发布到公共NPM

这有点复杂,有很多活动部分,比如创建和管理一个私有的NPM服务器,或者购买一个,在需要的时候更新项目中的NPM模块,但是我想这可以做到

使用CDN

为您的TS/JS文件保留一个单独的存储库,托管该文件,并在您想要的任何地方放置指向已部署JS的链接


Ref:

如果我们使用NuGet,我们是否必须在每次更改JavaScript文件时创建一个包?不,您不必,您可以使用NuGet的版本控制机制来管理它,并在构建过程中生成包。因此,我们必须根据对JavaScript文件的每次更改构建解决方案?我要做的是为常见JavaScript组件/库提供单独的解决方案,然后,在你的应用程序中,你只需要运行更新包就可以得到更改。我们仍然会像我的问题中所描述的那样,失去对TypeScript(JavaScript)的快速编辑。我们不希望周围的情况变得更糟。但这是一种新的看待事物的方式,谢谢你。我不敢相信我们的团队是全世界唯一面临这个问题的团队。那么后期建造指挥部呢?我有几个脚本项目,它们生成动态JS文件,我将这些文件放入解决方案中的几个项目中。只有团队愿意公开发布这些文件?:)我喜欢创建一个JS库然后在每个项目中删除它的想法。谢谢你的建议,我已经阅读了关于svn:externals的相互矛盾的观点。有人说这很好,也有人说这是一个有问题的解决方案。我自己来看看,我和svn externals是同舟共济的,svn externals解决了我的问题,即如何在两个版本之间重用我自己的大型JavaScript库