.NET(Visual Studio)在项目之间共享资产

时间:2013-11-18 13:32:59

标签: c# asp.net-mvc visual-studio

我正在使用Visual Studio。在那里,我有一个包含多个web项目的解决方案(.net MVC 4)。所有这些web项目都使用相同的javascript-libs。目前我将库复制到每个项目中,但这不是最终的解决方案。在所有项目之间共享这些库(一般资产)的最佳方法是什么?只是链接他们?或者是否可以创建一个项目并在所有项目中引用它?

更新

“链接”来自其他项目的javascript文件不是一个可能的解决方案,因为我必须链接数千个文件(我正在使用的一个库是ExtJs)使它成为什么在不冻结视觉工作室的情况下无法建立项目......

可能的解决方案

目前我有一个名为“Web”的(Web)MVC项目和一个名为“ClientScript”的(类库)项目,它包含在多个Web项目之间共享的所有JavaScript文件。因为链接所有需要的JavaScript文件不是一个可能的解决方案(因为它是导致visual studio冻结的数千个文件的问题)我使用每个Web项目中的构建事件将所有需要的JavaScript文件复制到各个项目(项目 - >属性 - >构建事件 - >构建后)。 我在Web项目中的Post-build命令行如下所示:

start xcopy "$(SolutionDir)ClientScript\Frontend\*" "$(SolutionDir)Web\Scripts" /r /s /i /y /D /E

每次构建Web项目时,所有已更改的Javascript文件都会从ClientScript项目复制到Web项目中。

在开发Javascripts时,我运行了一个小的“filewatcher”工具,当它发生变化时,它会自动将文件从ClientScript项目复制到每个Web项目。这样,每当我对其中一个Javascripts进行更改时,我都不必构建Web项目。

5 个答案:

答案 0 :(得分:3)

将JS文件放在一个文件夹中,可能高于其他文件夹,并将它们添加到项目中,但使用“链接”选项。这是“添加现有项目...”对话框中“确定”按钮下拉菜单的一部分。

答案 1 :(得分:3)

将来遇到这个问题的任何人都应该知道Visual Studio中现在有共享项目来解决这个问题。通用Windows项目默认使用它们,您可以通过下载和安装VS扩展来创建自己的项目:https://visualstudiogallery.msdn.microsoft.com/315c13a7-2787-4f57-bdf7-adae6ed54450

注意:此时他们可能会对您尝试添加共享引用的项目类型感到挑剔。我创建了一个JavaScript共享项目,以在Windows商店js应用程序和MVC Web应用程序之间共享js文件,它不会让我这样说他们必须使用相同的语言。 (它支持C#,C ++或JavaScript)。

答案 2 :(得分:1)

当你运行每个新的ASP.NET MVC 4项目时,需要一个新的端口,然后其他应用程序就可以了。

我只是建议你一件简单的事。

运行一个包含所有pacakages的项目。打开它们webmatrix并将它们作为localhost:80运行。

您需要在webmatrix中设置站点的设置部分中的端口。现在它可以在localhost上重新生成,现在你可以引用这个包中的所有库。

答案 3 :(得分:1)

稍微老一点的线程,但我有另一种使用Web Essentials做类似事情的方法,它处理了不能正确发布的问题。

我在需要共享文件的项目之外有一个共享文件夹,通常是一个常见的'与其他东西一起投影,但可以只是Michael Perrenoud建议的一个简单文件夹。

然而,不是'添加为链接'我一直在项目中创建一个新的包,它需要共享的js / css文件,其名称与共享文件相同,然后使用相对引用位置而不是基于root的引用文件在共享文件夹中引用该文件用。

要将解决方案根目录中的共享文件夹中的文件添加到脚本文件夹,请在新的捆绑文件(* .bundle)中使用以下代码,根据需要更改文件夹/文件名。

<?xml version="1.0" encoding="utf-8"?>
<bundle xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://vswebessentials.com/schemas/v1/bundle.xsd">
        <settings>
                <minify>false</minify>
                <runOnBuild>true</runOnBuild>
        </settings>
        <files>
                <file>../../MySharedFolder/my-js-file.js</file>
        </files>
</bundle>

然后每次构建它都会重新创建具有最新版本的包,然后该版本也会按预期发布:)

如果需要,您甚至可以通过更改缩小&#39;来创建缩小版本。为真。或者更好的是,如果你愿意,你也可以将它们作为一个包加载,你有灵活性。

答案 4 :(得分:1)

这是一个较旧的线程,但由于业务需求复杂,现在应用程序分为不同的模块或子项目。因此,我们需要共享JavaScript文件,主题和CSS样式表文件等公共资源。

我个人觉得常见文件应放在单独的Asp .Net MVC 5项目中,该项目具有以下结构:ASP.NET MVC5 folder structure

enter image description here

现在最好的部分是您可以使用Bower,NPM或Nuget包管理器单独管理依赖项。

组织此项目中的所有文件后,将此项目托管到您自己的CDN或可能在云端。您可以使用Using CDN in Bundle Approach 来获取脚本或链接引用。

这将有助于您在所有项目中共享公共资源。如果团队中有许多开发人员,并且有人添加了不兼容的版本库,则可能会影响所有应用程序。