我正在开始部署我的 Web 应用程序,我需要保证所有要部署的程序集都是使用发布配置构建的。我们的系统是使用C#/.Net 3.5开发的。

有什么办法可以实现这一点吗?

有帮助吗?

解决方案

检查。我们的想法是,你得到的组件列表中使用Assembly.GetCustomAttributes()属性和搜索DebuggableAttribute然后找如果这样的属性有IsJITTrackingEnabled属性集。

    public bool IsAssemblyDebugBuild(Assembly assembly)
    {
        return assembly.GetCustomAttributes(false).OfType<DebuggableAttribute>().Any(da => da.IsJITTrackingEnabled);
    }

其他提示

我喜欢那个 大卫 建议,但你也可以这样做(AssemblyInfo.cs):

#if DEBUG
[assembly: AssemblyDescription("Your application assembly (DEBUG version)")]
#else if RELEASE
[assembly: AssemblyDescription("Your application assembly (RELEASE version)")]
#endif

这更加人性化,因为任何人都可以右键单击该程序集来选择 Properties 并前往 Details 标签。

如果这是你的组件,我相信使用 装配配置 属性是最好的方法。它被记录为“指定程序集的构建配置,例如零售或调试”。

根据您的构建配置,您可能拥有如下代码:

#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif

然后检查程序集属性:

public static bool IsAssemblyConfiguration(Assembly assembly, string configuration)
{
    var attributes = assembly.GetCustomAttributes(typeof(AssemblyConfigurationAttribute), false);
    if (attributes.Length == 1)
    {
        var assemblyConfiguration = attributes[0] as AssemblyConfigurationAttribute;
        if (assemblyConfiguration != null)
        {
            return assemblyConfiguration.Configuration.Equals(configuration, StringComparison.InvariantCultureIgnoreCase);
        }
    }
    return true;
}

(我认识R。鲁本斯·法里亚斯 (Rubens Farias) 的施鲁尔斯 (Schreurs) 评论也说了同样的话,但我在看到评论之前在其他地方找到了此信息,所以我相信这需要更重要的条目,例如完整回复而不是评论)

如果你有反射器安装也可以单击装配并查找可调试属性([组件:可调试()])。在拆装窗格

假设只有调试和发布的配置,调试符号是通过与调试配置定义的缺省,所以在AssemblyInfo.cs中下面的代码(属性文件夹下)。

#if DEBUG
[assembly: AssemblyTitle("Debug")]
#else
[assembly: AssemblyTitle("Release")]
#endif

我使用过AssemblyTitle作为AssemblyDescription它会出现在我的Windows 7的文件浏览器属性:

“DLL文件属性”

对于那些谁像大卫和stevieg的答案,这里是用C#编写一个脚本LINQPad。要使用该脚本,您需要下载 LINQPad 5 并确保C#程序中选择如图所示在下面的截图。

只需更换DLL_FOLDER_PATH到指向文件夹包含的DLL将被检查。

// TODO - Specify your folder containing DLLs to inspect
static string DLL_FOLDER_PATH = @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0";
void Main()
{
    (from dllPath in Directory.GetFiles(DLL_FOLDER_PATH, "*.dll")
    let assembly = dllPath.SafeLoad()
    let build = assembly == null ? "Error" : (dllPath.SafeLoad().IsAssemblyDebugBuild() ? "Debug" : "Release")
    select new {
        Assembly_Path = dllPath,
        Build = build,
    }).Dump();
}
static class Extensions {
    public static bool IsAssemblyDebugBuild(this Assembly assembly)
    {
        return assembly.GetCustomAttributes(false).OfType<DebuggableAttribute>().Select(da => da.IsJITTrackingEnabled).FirstOrDefault();
    }
    public static Assembly SafeLoad(this string path){
        try{
            return Assembly.LoadFrom(path);
        }
        catch {
            return null;
        }
    }
}

“检查使用LINQPad5”

LINQPAD 5可以下载这里。

不要通过 Visual Studio 部署到生产环境。调查 持续集成 和脚本化构建(例如 南安特, ,或者也许是更清晰的东西,比如 伪造的).

F5 键不是构建过程

对于那些认为这不能回答问题的批评者,OP 写道:

...我需要确保将使用释放配置构建所有要部署的组件。

保证 使用构建服务器,例如 团队城市 以及可能的发布管理工具,例如 八达通部署. 。锁定您的生产系统,以便开发人员必须完成官方构建过程。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top