我即将开始处理一些遗留代码,特别是 Silverlight 组件。我需要确定用于此组件的 Silverlight 版本,这样我就不会安装不需要的软件(特别是 DevExpress Silverlight)或做任何无关的工作。
问问题
593 次
2 回答
0
项目版本
要找出您的项目需要构建的 Silverlight(或其他引用的程序集,例如 DevExpress)的版本,您可以查看项目文件中的项目引用。
在下面的示例中,您可以看到作为Include
属性的一部分声明的版本。
<Reference Include="System.Windows.Controls, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\Program Files\Microsoft SDKs\Silverlight\v4.0\Libraries\Client\System.Windows.Controls.dll</HintPath>
</Reference>
构建的组件或应用程序版本
要确定构建特定组件所依据的 Silverlight(或其他引用的程序集,例如 DevExpress)的版本,您可以在 XAP 文件中的 DLL 上使用.NET Reflector或类似的 反射工具。要获取此 DLL,请将 XAP 扩展名更改为 ZIP 并使用您最喜欢的 ZIP 实用程序。
Silverlight 运行时版本
以下 javascript 使您能够获取已安装 Silverlight 运行时的版本。这是基于在此博客上找到的代码(现在似乎已损坏)。我记得编辑它以添加一些额外的浏览器等。
要获取版本,请使用Silverlight.version
.
// Determines the version of the Silverlight runtime.
// Taken from http://blog.mdk-photo.com/post/Detecting-Silverlight-version-installed.aspx
if (!window.Silverlight)
window.Silverlight = {};
Silverlight.ua = null;
///////////////////////////////////////////////////////////////////////////////
// detectSilverlightVersion
///////////////////////////////////////////////////////////////////////////////
function detectSilverlightVersion() {
var container;
var silverlightVersion;
var BinarySearch = function (control, versionNumbers, indx, min, max) {
if (max < min)
return -1 // not found
if (min == max)
return min
else {
versionNumbers[indx] = Math.ceil(min + ((max - min) / 2))
var isSupported = control.IsVersionSupported(buildVersionString(versionNumbers))
if (!isSupported)
return BinarySearch(control, versionNumbers, indx, min, versionNumbers[indx] - 1)
else
return BinarySearch(control, versionNumbers, indx, versionNumbers[indx], max)
}
}
var buildVersionString = function (versionNumbers) {
var versionString = "";
for (var l = 0; l < versionNumbers.length; ++l) {
versionString += versionNumbers[l];
if (l != versionNumbers.length - 1)
versionString += ".";
}
return versionString;
}
try {
var control = null;
if (Silverlight.ua != null && Silverlight.ua.Browser == 'MSIE') {
control = new ActiveXObject('AgControl.AgControl');
}
else {
if (navigator.plugins["Silverlight Plug-In"]) {
container = document.createElement("div")
document.body.appendChild(container);
container.innerHTML = '<embed type="application/x-silverlight" />';
control = container.childNodes[0];
}
}
if (control.Settings) {
try {
silverlightVersion = control.Settings.version;
}
catch (z) {
}
}
if (!silverlightVersion) {
var major = 0;
var minor = 0;
var revision = 0;
var build = 0;
var buildVersionString = function (versionNumbers) {
var versionString = "";
for (var l = 0; l < versionNumbers.length; ++l) {
versionString += versionNumbers[l];
if (l != versionNumbers.length - 1)
versionString += ".";
}
return versionString;
}
var versionNumbers = [0, 0, 0, 0];
if (arguments[0]) {
for (var i = 0; i < versionNumbers.length; ++i) {
for (var incrementor = 0; incrementor < 100000; ++incrementor) {
versionNumbers[i] = incrementor;
if (!control.IsVersionSupported(buildVersionString(versionNumbers))) {
versionNumbers[i] = incrementor - 1;
break;
}
}
}
} else {
versionNumbers[0] = BinarySearch(control, versionNumbers, 0, 0, 20);
versionNumbers[1] = BinarySearch(control, versionNumbers, 1, 0, 20);
versionNumbers[2] = BinarySearch(control, versionNumbers, 2, 0, 100000);
versionNumbers[3] = BinarySearch(control, versionNumbers, 3, 0, 20);
}
silverlightVersion = buildVersionString(versionNumbers);
}
control = null;
}
catch (e) {
}
if (container) {
container.parentNode.removeChild(container);
}
if (!silverlightVersion)
silverlightVersion = "Not installed!";
return silverlightVersion;
}
///////////////////////////////////////////////////////////////////////////////
// detectUserAgent Parses UA string and stores relevant data in Silverlight.ua.
///////////////////////////////////////////////////////////////////////////////
Silverlight.detectUserAgent = function () {
var ua = window.navigator.userAgent;
Silverlight.ua = { OS: 'Unsupported', Browser: 'Unsupported' };
//Silverlight does not support pre-Windows NT platforms
if (ua.indexOf('Windows NT') >= 0) {
Silverlight.ua.OS = 'Windows';
}
else if (ua.indexOf('PPC Mac OS X') >= 0) {
Silverlight.ua.OS = 'MacPPC';
}
else if (ua.indexOf('Intel Mac OS X') >= 0) {
Silverlight.ua.OS = 'MacIntel';
}
if (Silverlight.ua.OS != 'Unsupported') {
if (ua.indexOf('MSIE') >= 0) {
if (navigator.userAgent.indexOf('Win64') == -1) {
if (parseInt(ua.split('MSIE')[1]) >= 6) {
Silverlight.ua.Browser = 'MSIE';
}
}
}
else if (ua.indexOf('Firefox') >= 0) {
var version = ua.split('Firefox/')[1].split('.');
var major = parseInt(version[0]);
if (major >= 2) {
Silverlight.ua.Browser = 'Firefox';
}
else {
var minor = parseInt(version[1]);
if ((major == 1) && (minor >= 5)) {
Silverlight.ua.Browser = 'Firefox';
}
}
}
else if (ua.indexOf('Chrome') >= 0) {
Silverlight.ua.Browser = 'Chrome';
}
else if (ua.indexOf('Safari') >= 0) {
Silverlight.ua.Browser = 'Safari';
}
else if (ua.indexOf('Opera') >= 0) {
Silverlight.ua.Browser = 'Opera';
}
}
}
// Detect the user agent at script load time
Silverlight.detectUserAgent();
$(this).ready(function () {
Silverlight.version = detectSilverlightVersion();
});
于 2012-08-21T15:59:23.827 回答
0
一种方法可能是打开您的项目文件之一 (.csproj / .vbproj) 并找到 TargetFrameworkIdentifier。
针对 Silverlight 4 的项目:
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>`
针对 Silverlight 5 的项目:
<TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
于 2012-08-21T22:02:59.840 回答