【问题标题】:CruiseControl.net , SVN, web site and dependenciesCruiseControl.net、SVN、网站和依赖项
【发布时间】:2011-08-03 15:47:39
【问题描述】:

我有一个 Asp.Net 网站(没有 .csproj 文件)。

本网站源代码由SVN控制。

我从源代码管理中排除了 bin 文件夹。

所有外部程序集都是从我的 SVN 根目录下的 DLL 文件夹中引用的。

我尝试使用 Cruisecontrol.net 部署此网站。

问题:

Cruise control 从 subversion 加载所有文件,它针对 .sln 文件运行 msbuild.exe。这会导致错误:找不到外部程序集(因为 bin 文件夹已被排除)。

到目前为止我找到的解决方案:

在我的 msbuild 任务之前,将我的源代码管理中的 dll 复制到 /bin 文件夹。

还有其他解决方案吗? (我不想每次向我的项目添加外部程序集时都编辑我的配置)。

编辑:

我终于使用了“刷新文件”技术,这里是我用来创建它们的程序

 class Program
{
    private const string PATH_BIN = @"F:\WebSite\bin\";
    private const string PATH_REFERENCE = @"C:\DLL\";

    static void Main(string[] args)
    {
        foreach (string aFile in Directory.GetFiles(PATH_BIN))
        {
            if(!aFile.EndsWith(".dll"))
                continue;
            string pathRefreshFile = aFile + ".refresh";
            if(File.Exists(pathRefreshFile))
                continue;
            string referenceFilePath = PATH_REFERENCE+Path.GetFileName(aFile);
            if (!File.Exists(referenceFilePath))
                continue;
            using (StreamWriter sw = new StreamWriter(pathRefreshFile))
            {
                sw.Write(referenceFilePath);
            }
        }
    }
}

【问题讨论】:

    标签: asp.net svn cruisecontrol.net


    【解决方案1】:

    我假设您有第三方的 .dll 文件,而不是由类库项目创建的文件,您可以将其包含在解决方案中并添加为项目参考。我们在几乎所有的网络应用程序中都引用了 Microsoft Anti-Xss 库和其他常见的第三方 .dll 等项目。

    不排除 \bin 目录,而是排除 *.dll。这样,当您添加对 .dll 的引用时,Visual Studio 会将 .dll 添加到 \bin 目录,并将 .dll.refresh 文件添加到 \bin 目录。

    That.Refresh 文件告诉 Visual Studio 从哪里获取 .dll 文件。只要原始 .dll 位于该位置,您就应该能够在构建服务器或全新开发人员的 PC 上构建。

    例如,我们在源代码管理中有一个 \shared\commonDlls 目录,其中 .dll 被检入到源代码管理中。

    我们所有的其他应用都会在需要时引用这些内容。只要这些被签入,当构建服务器构建你的项目时,它就会知道去他的 \shared\commonDlls 目录复制那个 dll。

    这使我们能够拥有一个 .dll 文件的主源,这样我们就不必在升级时将其复制到几十个不同的 Web 应用程序中。我们将它放入我们的 shared\commonDlls 目录(覆盖原来的目录),签入,现在我们所有的网络应用程序都在使用最新版本。

    编辑 - 添加 - 与此答案相关的相关主题的答案链接:

    SVN and binaries

    How manage references in SVN/Visual Studio?

    Best Practice: Collaborative Environment, Bin Directory, SVN

    编辑 - 添加 - 我们的 ccnet.config 文件中指向 .sln 文件的部分

    这可能不是必需的,但由于我在下面的评论中提到了 .sln 文件,所以我想我会添加它。

    <msbuild>
            <description>DonationRequests</description>
            <workingDirectory>D:\dev\svn\trunk\Intranet\DonationRequests</workingDirectory>
            <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
            <projectFile>DonationRequests.sln</projectFile>
            <buildArgs>/p:Configuration=Debug /v:diag</buildArgs>
            <timeout>900</timeout>
            <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
    </msbuild>
    

    【讨论】:

    • 这里的问题是我是从msbuild构建的,所以没有使用.refresh文件
    • 我们也是从 msbuild 构建的,它们正在我们的系统中使用。您是否将 msbuild 指向 .sln 文件?实际上,除非我弄错了,甚至 Visual Studio it'ef 都使用 msbuild,不是吗?
    • 我用小批量添加了刷新文件(我有 30 多个 dll,不想手动创建它们),它工作了。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多