Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / xsp / System / Web / Extensions / ui / ScriptReference.cs / 4 / ScriptReference.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.UI {
using System;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Reflection;
using System.Security.Permissions;
using System.Web;
using System.Web.Handlers;
using System.Web.Resources;
using System.Web.Util;
using Debug = System.Diagnostics.Debug;
[
AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal),
DefaultProperty("Path"),
]
public class ScriptReference : ScriptReferenceBase {
// Maps Pair(resource name, assembly) to string (partial script path)
private static readonly Hashtable _scriptPathCache = Hashtable.Synchronized(new Hashtable());
private string _assembly;
private bool _ignoreScriptPath;
private string _name;
public ScriptReference() : base() {}
public ScriptReference(string name, string assembly) : this() {
Name = name;
Assembly = assembly;
}
public ScriptReference(string path) : this() {
Path = path;
}
internal ScriptReference(string name, IClientUrlResolver clientUrlResolver, Control containingControl) : this() {
Debug.Assert(!String.IsNullOrEmpty(name), "The script's name must be specified.");
Debug.Assert(clientUrlResolver != null && clientUrlResolver is ScriptManager, "The clientUrlResolver must be the ScriptManager.");
Name = name;
ClientUrlResolver = clientUrlResolver;
IsStaticReference = true;
ContainingControl = containingControl;
}
[
Category("Behavior"),
DefaultValue(""),
ResourceDescription("ScriptReference_Assembly")
]
public string Assembly {
get {
return (_assembly == null) ? String.Empty : _assembly;
}
set {
_assembly = value;
}
}
internal ScriptMode EffectiveScriptMode {
get {
if (ScriptMode == ScriptMode.Auto) {
// - When only Path is specified, ScriptMode.Auto is equivalent to ScriptMode.Release.
// - When only Name is specified, ScriptMode.Auto is equivalent to ScriptMode.Inherit.
// - When Name and Path are both specified, the Path is used instead of the Name, but
// ScriptMode.Auto is still equivalent to ScriptMode.Inherit, since the assumption
// is that if the Assembly contains both release and debug scripts, the Path should
// contain both as well.
return (String.IsNullOrEmpty(Name) ? ScriptMode.Release : ScriptMode.Inherit);
}
else {
return ScriptMode;
}
}
}
[
Category("Behavior"),
DefaultValue(false),
ResourceDescription("ScriptReference_IgnoreScriptPath")
]
public bool IgnoreScriptPath {
get {
return _ignoreScriptPath;
}
set {
_ignoreScriptPath = value;
}
}
[
Category("Behavior"),
DefaultValue(""),
ResourceDescription("ScriptReference_Name")
]
public string Name {
get {
return (_name == null) ? String.Empty : _name;
}
set {
_name = value;
}
}
internal CultureInfo DetermineCulture() {
if ((ResourceUICultures == null) || (ResourceUICultures.Length == 0)) {
// In this case we want to determine available cultures from assembly info if available
if (!String.IsNullOrEmpty(Name)) {
return ScriptResourceHandler
.DetermineNearestAvailableCulture(GetAssembly(), Name, CultureInfo.CurrentUICulture);
}
return CultureInfo.InvariantCulture;
}
CultureInfo currentCulture = CultureInfo.CurrentUICulture;
while (!currentCulture.Equals(CultureInfo.InvariantCulture)) {
string cultureName = currentCulture.ToString();
foreach (string uiCulture in ResourceUICultures) {
if (String.Equals(cultureName, uiCulture.Trim(), StringComparison.OrdinalIgnoreCase)) {
return currentCulture;
}
}
currentCulture = currentCulture.Parent;
}
return currentCulture;
}
internal Assembly GetAssembly() {
string assemblyName = Assembly;
if (String.IsNullOrEmpty(assemblyName)) {
return AssemblyCache.SystemWebExtensions;
}
else {
// Use AssemblyCache instead of directly calling Assembly.Load(), for improved perf.
// Increases requests/second by over 150% in ScriptManagerAssembly.aspx test.
return AssemblyCache.Load(assemblyName);
}
}
// Release: foo.js
// Debug: foo.debug.js
private static string GetDebugName(string releaseName) {
// Since System.Web.Handlers.AssemblyResourceLoader treats the resource name as case-sensitive,
// we must do the same when verifying the extension.
// Ignore trailing whitespace. For example, "MicrosoftAjax.js " is valid (at least from
// a debug/release naming perspective).
if (!releaseName.EndsWith(".js", StringComparison.Ordinal)) {
throw new InvalidOperationException(
String.Format(CultureInfo.CurrentUICulture, AtlasWeb.ScriptReference_InvalidReleaseScriptName, releaseName));
}
return ReplaceExtension(releaseName);
}
internal string GetPath(string releasePath, bool isDebuggingEnabled) {
if (String.IsNullOrEmpty(Name)) {
return GetPathWithoutName(releasePath, isDebuggingEnabled);
}
else {
return GetPathWithName(releasePath, isDebuggingEnabled);
}
}
// When Name is empty, there is no Name/Assembly logic involved.
private string GetPathWithoutName(string releasePath, bool isDebuggingEnabled) {
if (isDebuggingEnabled) {
return GetDebugPath(releasePath);
}
else {
return releasePath;
}
}
// When Name and Path are both specified, the Path is used instead of the Name, but we
// still verify that the named resource exists in the assembly. We also look inside the
// assembly to determine whether to use the debug or release script. The assumption is
// that if the Assembly contains only a release script, the path should contain only a
// release script as well.
private string GetPathWithName(string releasePath, bool isDebuggingEnabled) {
if (ShouldUseDebugScript(Name, GetAssembly(), isDebuggingEnabled)) {
return GetDebugPath(releasePath);
}
else {
return releasePath;
}
}
internal string GetResourceName(string releaseName, Assembly assembly, bool isDebuggingEnabled) {
string resourceName;
if (ShouldUseDebugScript(releaseName, assembly, isDebuggingEnabled)) {
resourceName = GetDebugName(releaseName);
}
else {
resourceName = releaseName;
}
return resourceName;
}
// Format: ///
// This function does not canonicalize the path in any way (i.e. remove duplicate slashes).
// You must call ResolveClientUrl() on this path before rendering to the page.
internal static string GetScriptPath(
string resourceName,
Assembly assembly,
CultureInfo culture,
string scriptPath) {
return scriptPath + "/" + GetScriptPathCached(resourceName, assembly, culture);
}
// Cache partial script path, since Version.ToString() and HttpUtility.UrlEncode() are expensive.
// Increases requests/second by 50% in ScriptManagerScriptPath.aspx test.
private static string GetScriptPathCached(string resourceName, Assembly assembly, CultureInfo culture) {
Tuple key = new Tuple(resourceName, assembly, culture);
string scriptPath = (string)_scriptPathCache[key];
if (scriptPath == null) {
// Need to use "new AssemblyName(assembly.FullName)" instead of "assembly.GetName()",
// since Assembly.GetName() requires FileIOPermission to the path of the assembly.
// In partial trust, we may not have this permission.
AssemblyName assemblyName = new AssemblyName(assembly.FullName);
string name = assemblyName.Name;
string version = assemblyName.Version.ToString();
string fileVersion = AssemblyUtil.GetAssemblyFileVersion(assembly);
if ((!culture.Equals(CultureInfo.InvariantCulture)) &&
resourceName.EndsWith(".js", StringComparison.OrdinalIgnoreCase)) {
resourceName = resourceName.Substring(0, resourceName.Length - 3) +
"." + culture.Name + ".js";
}
// Assembly name, fileVersion, and resource name may contain invalid URL characters (like '#' or '/'),
// so they must be url-encoded.
scriptPath = String.Join("/", new string[] {
HttpUtility.UrlEncode(name), version, HttpUtility.UrlEncode(fileVersion), HttpUtility.UrlEncode(resourceName)
});
_scriptPathCache[key] = scriptPath;
}
return scriptPath;
}
[SuppressMessage("Microsoft.Design", "CA1055", Justification = "Consistent with other URL properties in ASP.NET.")]
protected internal override string GetUrl(ScriptManager scriptManager, bool zip) {
bool hasName = !String.IsNullOrEmpty(Name);
bool hasAssembly = !String.IsNullOrEmpty(Assembly);
bool hasPath = !String.IsNullOrEmpty(Path);
if (!hasName && !hasPath) {
throw new InvalidOperationException(AtlasWeb.ScriptReference_NameAndPathCannotBeEmpty);
}
if (hasAssembly && !hasName) {
throw new InvalidOperationException(AtlasWeb.ScriptReference_AssemblyRequiresName);
}
// If Path+Name are specified, Path overrides Name.
if (hasPath) {
return GetUrlFromPath(scriptManager);
}
else {
Debug.Assert(hasName);
return GetUrlFromName(scriptManager, scriptManager.Control, zip);
}
}
private string GetUrlFromName(ScriptManager scriptManager, IControl scriptManagerControl, bool zip) {
string releaseName = Name;
Assembly assembly = GetAssembly();
// GetResourceName() throws exception if the resource name does not exist in the assembly
string resourceName = GetResourceName(releaseName, assembly, IsDebuggingEnabled(scriptManager));
string url;
CultureInfo culture = (scriptManager.EnableScriptLocalization ?
DetermineCulture() : CultureInfo.InvariantCulture);
if (IgnoreScriptPath || String.IsNullOrEmpty(scriptManager.ScriptPath)) {
url = ScriptResourceHandler
.GetScriptResourceUrl(assembly, resourceName, culture, zip, NotifyScriptLoaded);
}
else {
string path = GetScriptPath(resourceName, assembly, culture, scriptManager.ScriptPath);
// Always want to resolve ScriptPath urls against the ScriptManager itself,
// regardless of whether the ScriptReference was declared on the ScriptManager
// or a ScriptManagerProxy.
url = scriptManagerControl.ResolveClientUrl(path);
}
return url;
}
private string GetUrlFromPath(ScriptManager scriptManager) {
string releasePath = Path;
string path = GetPath(releasePath, IsDebuggingEnabled(scriptManager));
// Once the path has been determined, add localization if necessary
if (scriptManager.EnableScriptLocalization) {
CultureInfo culture = DetermineCulture();
if (!culture.Equals(CultureInfo.InvariantCulture)) {
path = (path.Substring(0, path.Length - 2) + culture.ToString() + ".js");
}
}
string resolvedUrl = ClientUrlResolver.ResolveClientUrl(path);
return resolvedUrl;
}
private bool IsDebuggingEnabled(ScriptManager scriptManager) {
// Deployment mode retail overrides all values of ScriptReference.ScriptMode.
if (scriptManager.DeploymentSectionRetail) {
return false;
}
switch (EffectiveScriptMode) {
case ScriptMode.Inherit:
return scriptManager.IsDebuggingEnabled;
case ScriptMode.Debug:
return true;
case ScriptMode.Release:
return false;
default:
Debug.Fail("Invalid value for ScriptReference.EffectiveScriptMode");
return false;
}
}
protected internal override bool IsFromSystemWebExtensions() {
return (GetAssembly() == AssemblyCache.SystemWebExtensions);
}
internal bool ShouldUseDebugScript(string releaseName, Assembly assembly, bool isDebuggingEnabled) {
bool useDebugScript;
string debugName = null;
if (isDebuggingEnabled) {
debugName = GetDebugName(releaseName);
// If an assembly contains a release script but not a corresponding debug script, and we
// need to register the debug script, we normally throw an exception. However, we automatically
// use the release script if ScriptReference.ScriptMode is Auto. This improves the developer
// experience when ScriptMode is Auto, yet still gives the developer full control with the
// other ScriptModes.
if (ScriptMode == ScriptMode.Auto && !WebResourceUtil.AssemblyContainsWebResource(assembly, debugName)) {
useDebugScript = false;
}
else {
useDebugScript = true;
}
}
else {
useDebugScript = false;
}
// Verify that assembly contains required web resources. Always check for release
// script before debug script.
WebResourceUtil.VerifyAssemblyContainsReleaseWebResource(assembly, releaseName);
if (useDebugScript) {
Debug.Assert(debugName != null);
WebResourceUtil.VerifyAssemblyContainsDebugWebResource(assembly, debugName);
}
return useDebugScript;
}
// Improves the UI in the VS collection editor, by displaying the Name or Path (if available), or
// the short type name.
[SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")]
public override string ToString() {
if (!String.IsNullOrEmpty(Name)) {
return Name;
}
else if (!String.IsNullOrEmpty(Path)) {
return Path;
}
else {
return GetType().Name;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.UI {
using System;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Reflection;
using System.Security.Permissions;
using System.Web;
using System.Web.Handlers;
using System.Web.Resources;
using System.Web.Util;
using Debug = System.Diagnostics.Debug;
[
AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal),
DefaultProperty("Path"),
]
public class ScriptReference : ScriptReferenceBase {
// Maps Pair(resource name, assembly) to string (partial script path)
private static readonly Hashtable _scriptPathCache = Hashtable.Synchronized(new Hashtable());
private string _assembly;
private bool _ignoreScriptPath;
private string _name;
public ScriptReference() : base() {}
public ScriptReference(string name, string assembly) : this() {
Name = name;
Assembly = assembly;
}
public ScriptReference(string path) : this() {
Path = path;
}
internal ScriptReference(string name, IClientUrlResolver clientUrlResolver, Control containingControl) : this() {
Debug.Assert(!String.IsNullOrEmpty(name), "The script's name must be specified.");
Debug.Assert(clientUrlResolver != null && clientUrlResolver is ScriptManager, "The clientUrlResolver must be the ScriptManager.");
Name = name;
ClientUrlResolver = clientUrlResolver;
IsStaticReference = true;
ContainingControl = containingControl;
}
[
Category("Behavior"),
DefaultValue(""),
ResourceDescription("ScriptReference_Assembly")
]
public string Assembly {
get {
return (_assembly == null) ? String.Empty : _assembly;
}
set {
_assembly = value;
}
}
internal ScriptMode EffectiveScriptMode {
get {
if (ScriptMode == ScriptMode.Auto) {
// - When only Path is specified, ScriptMode.Auto is equivalent to ScriptMode.Release.
// - When only Name is specified, ScriptMode.Auto is equivalent to ScriptMode.Inherit.
// - When Name and Path are both specified, the Path is used instead of the Name, but
// ScriptMode.Auto is still equivalent to ScriptMode.Inherit, since the assumption
// is that if the Assembly contains both release and debug scripts, the Path should
// contain both as well.
return (String.IsNullOrEmpty(Name) ? ScriptMode.Release : ScriptMode.Inherit);
}
else {
return ScriptMode;
}
}
}
[
Category("Behavior"),
DefaultValue(false),
ResourceDescription("ScriptReference_IgnoreScriptPath")
]
public bool IgnoreScriptPath {
get {
return _ignoreScriptPath;
}
set {
_ignoreScriptPath = value;
}
}
[
Category("Behavior"),
DefaultValue(""),
ResourceDescription("ScriptReference_Name")
]
public string Name {
get {
return (_name == null) ? String.Empty : _name;
}
set {
_name = value;
}
}
internal CultureInfo DetermineCulture() {
if ((ResourceUICultures == null) || (ResourceUICultures.Length == 0)) {
// In this case we want to determine available cultures from assembly info if available
if (!String.IsNullOrEmpty(Name)) {
return ScriptResourceHandler
.DetermineNearestAvailableCulture(GetAssembly(), Name, CultureInfo.CurrentUICulture);
}
return CultureInfo.InvariantCulture;
}
CultureInfo currentCulture = CultureInfo.CurrentUICulture;
while (!currentCulture.Equals(CultureInfo.InvariantCulture)) {
string cultureName = currentCulture.ToString();
foreach (string uiCulture in ResourceUICultures) {
if (String.Equals(cultureName, uiCulture.Trim(), StringComparison.OrdinalIgnoreCase)) {
return currentCulture;
}
}
currentCulture = currentCulture.Parent;
}
return currentCulture;
}
internal Assembly GetAssembly() {
string assemblyName = Assembly;
if (String.IsNullOrEmpty(assemblyName)) {
return AssemblyCache.SystemWebExtensions;
}
else {
// Use AssemblyCache instead of directly calling Assembly.Load(), for improved perf.
// Increases requests/second by over 150% in ScriptManagerAssembly.aspx test.
return AssemblyCache.Load(assemblyName);
}
}
// Release: foo.js
// Debug: foo.debug.js
private static string GetDebugName(string releaseName) {
// Since System.Web.Handlers.AssemblyResourceLoader treats the resource name as case-sensitive,
// we must do the same when verifying the extension.
// Ignore trailing whitespace. For example, "MicrosoftAjax.js " is valid (at least from
// a debug/release naming perspective).
if (!releaseName.EndsWith(".js", StringComparison.Ordinal)) {
throw new InvalidOperationException(
String.Format(CultureInfo.CurrentUICulture, AtlasWeb.ScriptReference_InvalidReleaseScriptName, releaseName));
}
return ReplaceExtension(releaseName);
}
internal string GetPath(string releasePath, bool isDebuggingEnabled) {
if (String.IsNullOrEmpty(Name)) {
return GetPathWithoutName(releasePath, isDebuggingEnabled);
}
else {
return GetPathWithName(releasePath, isDebuggingEnabled);
}
}
// When Name is empty, there is no Name/Assembly logic involved.
private string GetPathWithoutName(string releasePath, bool isDebuggingEnabled) {
if (isDebuggingEnabled) {
return GetDebugPath(releasePath);
}
else {
return releasePath;
}
}
// When Name and Path are both specified, the Path is used instead of the Name, but we
// still verify that the named resource exists in the assembly. We also look inside the
// assembly to determine whether to use the debug or release script. The assumption is
// that if the Assembly contains only a release script, the path should contain only a
// release script as well.
private string GetPathWithName(string releasePath, bool isDebuggingEnabled) {
if (ShouldUseDebugScript(Name, GetAssembly(), isDebuggingEnabled)) {
return GetDebugPath(releasePath);
}
else {
return releasePath;
}
}
internal string GetResourceName(string releaseName, Assembly assembly, bool isDebuggingEnabled) {
string resourceName;
if (ShouldUseDebugScript(releaseName, assembly, isDebuggingEnabled)) {
resourceName = GetDebugName(releaseName);
}
else {
resourceName = releaseName;
}
return resourceName;
}
// Format: ///
// This function does not canonicalize the path in any way (i.e. remove duplicate slashes).
// You must call ResolveClientUrl() on this path before rendering to the page.
internal static string GetScriptPath(
string resourceName,
Assembly assembly,
CultureInfo culture,
string scriptPath) {
return scriptPath + "/" + GetScriptPathCached(resourceName, assembly, culture);
}
// Cache partial script path, since Version.ToString() and HttpUtility.UrlEncode() are expensive.
// Increases requests/second by 50% in ScriptManagerScriptPath.aspx test.
private static string GetScriptPathCached(string resourceName, Assembly assembly, CultureInfo culture) {
Tuple key = new Tuple(resourceName, assembly, culture);
string scriptPath = (string)_scriptPathCache[key];
if (scriptPath == null) {
// Need to use "new AssemblyName(assembly.FullName)" instead of "assembly.GetName()",
// since Assembly.GetName() requires FileIOPermission to the path of the assembly.
// In partial trust, we may not have this permission.
AssemblyName assemblyName = new AssemblyName(assembly.FullName);
string name = assemblyName.Name;
string version = assemblyName.Version.ToString();
string fileVersion = AssemblyUtil.GetAssemblyFileVersion(assembly);
if ((!culture.Equals(CultureInfo.InvariantCulture)) &&
resourceName.EndsWith(".js", StringComparison.OrdinalIgnoreCase)) {
resourceName = resourceName.Substring(0, resourceName.Length - 3) +
"." + culture.Name + ".js";
}
// Assembly name, fileVersion, and resource name may contain invalid URL characters (like '#' or '/'),
// so they must be url-encoded.
scriptPath = String.Join("/", new string[] {
HttpUtility.UrlEncode(name), version, HttpUtility.UrlEncode(fileVersion), HttpUtility.UrlEncode(resourceName)
});
_scriptPathCache[key] = scriptPath;
}
return scriptPath;
}
[SuppressMessage("Microsoft.Design", "CA1055", Justification = "Consistent with other URL properties in ASP.NET.")]
protected internal override string GetUrl(ScriptManager scriptManager, bool zip) {
bool hasName = !String.IsNullOrEmpty(Name);
bool hasAssembly = !String.IsNullOrEmpty(Assembly);
bool hasPath = !String.IsNullOrEmpty(Path);
if (!hasName && !hasPath) {
throw new InvalidOperationException(AtlasWeb.ScriptReference_NameAndPathCannotBeEmpty);
}
if (hasAssembly && !hasName) {
throw new InvalidOperationException(AtlasWeb.ScriptReference_AssemblyRequiresName);
}
// If Path+Name are specified, Path overrides Name.
if (hasPath) {
return GetUrlFromPath(scriptManager);
}
else {
Debug.Assert(hasName);
return GetUrlFromName(scriptManager, scriptManager.Control, zip);
}
}
private string GetUrlFromName(ScriptManager scriptManager, IControl scriptManagerControl, bool zip) {
string releaseName = Name;
Assembly assembly = GetAssembly();
// GetResourceName() throws exception if the resource name does not exist in the assembly
string resourceName = GetResourceName(releaseName, assembly, IsDebuggingEnabled(scriptManager));
string url;
CultureInfo culture = (scriptManager.EnableScriptLocalization ?
DetermineCulture() : CultureInfo.InvariantCulture);
if (IgnoreScriptPath || String.IsNullOrEmpty(scriptManager.ScriptPath)) {
url = ScriptResourceHandler
.GetScriptResourceUrl(assembly, resourceName, culture, zip, NotifyScriptLoaded);
}
else {
string path = GetScriptPath(resourceName, assembly, culture, scriptManager.ScriptPath);
// Always want to resolve ScriptPath urls against the ScriptManager itself,
// regardless of whether the ScriptReference was declared on the ScriptManager
// or a ScriptManagerProxy.
url = scriptManagerControl.ResolveClientUrl(path);
}
return url;
}
private string GetUrlFromPath(ScriptManager scriptManager) {
string releasePath = Path;
string path = GetPath(releasePath, IsDebuggingEnabled(scriptManager));
// Once the path has been determined, add localization if necessary
if (scriptManager.EnableScriptLocalization) {
CultureInfo culture = DetermineCulture();
if (!culture.Equals(CultureInfo.InvariantCulture)) {
path = (path.Substring(0, path.Length - 2) + culture.ToString() + ".js");
}
}
string resolvedUrl = ClientUrlResolver.ResolveClientUrl(path);
return resolvedUrl;
}
private bool IsDebuggingEnabled(ScriptManager scriptManager) {
// Deployment mode retail overrides all values of ScriptReference.ScriptMode.
if (scriptManager.DeploymentSectionRetail) {
return false;
}
switch (EffectiveScriptMode) {
case ScriptMode.Inherit:
return scriptManager.IsDebuggingEnabled;
case ScriptMode.Debug:
return true;
case ScriptMode.Release:
return false;
default:
Debug.Fail("Invalid value for ScriptReference.EffectiveScriptMode");
return false;
}
}
protected internal override bool IsFromSystemWebExtensions() {
return (GetAssembly() == AssemblyCache.SystemWebExtensions);
}
internal bool ShouldUseDebugScript(string releaseName, Assembly assembly, bool isDebuggingEnabled) {
bool useDebugScript;
string debugName = null;
if (isDebuggingEnabled) {
debugName = GetDebugName(releaseName);
// If an assembly contains a release script but not a corresponding debug script, and we
// need to register the debug script, we normally throw an exception. However, we automatically
// use the release script if ScriptReference.ScriptMode is Auto. This improves the developer
// experience when ScriptMode is Auto, yet still gives the developer full control with the
// other ScriptModes.
if (ScriptMode == ScriptMode.Auto && !WebResourceUtil.AssemblyContainsWebResource(assembly, debugName)) {
useDebugScript = false;
}
else {
useDebugScript = true;
}
}
else {
useDebugScript = false;
}
// Verify that assembly contains required web resources. Always check for release
// script before debug script.
WebResourceUtil.VerifyAssemblyContainsReleaseWebResource(assembly, releaseName);
if (useDebugScript) {
Debug.Assert(debugName != null);
WebResourceUtil.VerifyAssemblyContainsDebugWebResource(assembly, debugName);
}
return useDebugScript;
}
// Improves the UI in the VS collection editor, by displaying the Name or Path (if available), or
// the short type name.
[SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")]
public override string ToString() {
if (!String.IsNullOrEmpty(Name)) {
return Name;
}
else if (!String.IsNullOrEmpty(Path)) {
return Path;
}
else {
return GetType().Name;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- _Semaphore.cs
- HttpHeaderCollection.cs
- FieldNameLookup.cs
- SchemaMerger.cs
- TagPrefixInfo.cs
- AppDomainAttributes.cs
- TemplateField.cs
- COM2TypeInfoProcessor.cs
- TransportConfigurationTypeElementCollection.cs
- TriggerCollection.cs
- DefinitionBase.cs
- EditorAttribute.cs
- WorkflowInstanceUnhandledExceptionRecord.cs
- ForceCopyBuildProvider.cs
- MembershipUser.cs
- WinFormsSpinner.cs
- ShortcutKeysEditor.cs
- AsymmetricKeyExchangeDeformatter.cs
- HtmlInputRadioButton.cs
- PixelShader.cs
- PropertyGridCommands.cs
- SqlGenerator.cs
- OTFRasterizer.cs
- PropertyExpression.cs
- GPRECTF.cs
- DetailsViewInsertedEventArgs.cs
- Rule.cs
- SiteMapNode.cs
- TransformCryptoHandle.cs
- PlanCompilerUtil.cs
- DocobjHost.cs
- MetadataArtifactLoaderCompositeFile.cs
- ConfigurationException.cs
- CommandExpr.cs
- TableLayoutRowStyleCollection.cs
- ConfigurationPermission.cs
- WmfPlaceableFileHeader.cs
- BamlLocalizableResourceKey.cs
- milrender.cs
- AccessorTable.cs
- TableParaClient.cs
- SizeIndependentAnimationStorage.cs
- SafeNativeMethods.cs
- SmiRequestExecutor.cs
- UntypedNullExpression.cs
- OutputScopeManager.cs
- InvalidComObjectException.cs
- BrowserCapabilitiesCompiler.cs
- TextServicesLoader.cs
- XmlC14NWriter.cs
- Brush.cs
- WeakEventTable.cs
- Command.cs
- DataGridColumnHeaderAutomationPeer.cs
- SessionEndingCancelEventArgs.cs
- CharEntityEncoderFallback.cs
- DefaultTextStoreTextComposition.cs
- TypeHelper.cs
- BindableAttribute.cs
- PrinterResolution.cs
- DataKey.cs
- LineServices.cs
- ChildTable.cs
- ISAPIApplicationHost.cs
- UserControlBuildProvider.cs
- LogicalExpr.cs
- XmlConvert.cs
- XmlUtil.cs
- SynchronizationContext.cs
- SqlNodeAnnotations.cs
- DetectRunnableInstancesTask.cs
- XmlDataContract.cs
- PeerPresenceInfo.cs
- ExtensionFile.cs
- MailAddressParser.cs
- MergeEnumerator.cs
- SiteMap.cs
- AutomationElement.cs
- DataControlPagerLinkButton.cs
- MulticastIPAddressInformationCollection.cs
- ObservableDictionary.cs
- _ConnectOverlappedAsyncResult.cs
- SelectionHighlightInfo.cs
- ServiceDiscoveryElement.cs
- VisualStyleTypesAndProperties.cs
- SemanticAnalyzer.cs
- DefaultMemberAttribute.cs
- BlurEffect.cs
- CultureInfoConverter.cs
- PixelFormatConverter.cs
- BasicBrowserDialog.cs
- FontWeightConverter.cs
- DataGridViewColumn.cs
- ObjectManager.cs
- ShapingEngine.cs
- HwndSubclass.cs
- QilXmlReader.cs
- SmiRequestExecutor.cs
- UInt64Converter.cs
- GlyphElement.cs