我正在尝试编译下面的代码,但现在无法调试。有什么想法吗?
using System;
using System.Collections.Generic;
using Microsoft.AnalysisServices;
using System.Runtime.Serialization;
namespace SqlBi.Tools {
/// <summary>
/// MdxScriptUpdater handles the manage of custom
/// MDX statements into an existing cube
/// Use in this way:
/// 1 - Create a MdxScriptUpdater instance specifying a server name
/// 2 - Add MDX statements you want to put into the cube adding strings to MdxCommands collection
/// 3 - Call Update method passing the name of database and cube - you have to use object IDs instead of displayed names!
/// </summary>
public class MdxScriptUpdater : IDisposable {
/// <summary>
/// Type of update
/// </summary>
public enum UpdateType {
/// <summary>
/// Delete existing commands and insert the new ones
/// </summary>
DeleteAndInsert,
/// <summary>
/// Only delete existing commands
/// </summary>
DeleteOnly,
/// <summary>
/// Only insert new commands (be careful, you can create duplicates!)
/// </summary>
InsertOnly
};
private string _marker = "/* AUTO-GENERATED */";
private Server _serverConnection = null;
private bool _ownedServer = false;
private List<string> _mdxCommands;
/// <summary>
/// Marker is a comment that is put in front of the MDX statement to recognize managed MDX statements
/// </summary>
public string Marker {
get { return this._marker; }
set { this._marker = value; }
}
/// <summary>
/// This is the connection to the server.
/// It is auto generated by the constructor but you can use your own connection, if you want
/// </summary>
public Server ServerConnection {
get { return this._serverConnection; }
set {
if (this._serverConnection != null && _ownedServer) {
try {
this.Dispose();
}
finally {
_ownedServer = false;
}
}
this.ServerConnection = value;
_ownedServer = true;
}
}
/// <summary>
/// List of Mdx statements to add/update into the cube
/// Populate the list before calling the Update(...) method
/// </summary>
public List<string> MdxCommands {
get { return this._mdxCommands; }
set { this._mdxCommands = value; }
}
/// <summary>
/// Default constructor - connection is not defined
/// </summary>
public MdxScriptUpdater() {
this._mdxCommands = new List<string>();
}
/// <summary>
/// Constructor that connects to the specified server
/// </summary>
/// <param name="serverName">Name of the Analsys Services server instance (SERVERNAME or SERVERNAME\INSTANCE)</param>
public MdxScriptUpdater( string serverName ) : this() {
this._serverConnection = new Server();
this.ServerConnection.Connect( serverName );
}
/// <summary>
/// Apply updates to the specified cube
/// Deletes existing managed Mdx commands and insert the ones in MdxCommands string collection
/// </summary>
/// <param name="databaseName">Name (ID) of the Database</param>
/// <param name="cubeName">Name (ID) of the Cube</param>
public void Update( string databaseName, string cubeName ) {
Update( databaseName, cubeName, UpdateType.DeleteAndInsert );
}
/// <summary>
/// Apply updates to the specified cube
/// </summary>
/// <param name="databaseName">Name (ID) of the Database</param>
/// <param name="cubeName">Name (ID) of the Cube</param>
/// <param name="updateType">Type of update</param>
public void Update( string databaseName, string cubeName, UpdateType updateType ) {
Database db = ServerConnection.Databases[databaseName];
Cube cube = db.Cubes[cubeName];
Update( cube, updateType );
}
/// <summary>
/// Apply updates to the specified cube
/// </summary>
/// <param name="cube">Cube object</param>
public void Update( Cube cube ) {
Update( cube, UpdateType.DeleteAndInsert );
}
/// <summary>
/// Apply updates to the specified cube
/// </summary>
/// <param name="cube">Cube object</param>
/// <param name="updateType">Type of update</param>
public void Update( Cube cube, UpdateType updateType ) {
// Look for the default MDX Script object
foreach( MdxScript script in cube.MdxScripts) {
if (script.DefaultScript) {
Update( script, updateType );
cube.Update();
return;
}
}
throw new MdxScriptUpdaterException( "Default script not found" );
}
/// <summary>
/// Update an MdxScript
/// Deletes existing managed Mdx commands and insert the ones in MdxCommands string collection
/// </summary>
/// <param name="script">MdxScript to update</param>
/// <param name="updateType">Type of update</param>
public void Update( MdxScript script, UpdateType updateType ) {
if (updateType == UpdateType.DeleteAndInsert || updateType == UpdateType.DeleteOnly) {
DeleteMarkedCommands( script );
}
if (updateType == UpdateType.DeleteAndInsert || updateType == UpdateType.InsertOnly) {
InsertMarkedCommands( script );
}
script.Update();
}
/// <summary>
/// Deletes existing managed Mdx commands using default Marker comment string
/// </summary>
/// <param name="script">MdxScript to update</param>
public void DeleteMarkedCommands( MdxScript script ) {
DeleteMarkedCommands( script, Marker );
}
/// <summary>
/// Deletes existing managed Mdx commands using a custom Marker comment string
/// </summary>
/// <param name="script">MdxScript to update</param>
/// <param name="marker">Custom marker comment string</param>
public static void DeleteMarkedCommands( MdxScript script, string marker ) {
for( int i = script.Commands.Count - 1; i >= 0; i-- ) {
if (script.Commands[i].Text.Contains( marker )) {
script.Commands.RemoveAt( i );
}
}
}
/// <summary>
/// Insert managed commands of MdxCommands string collection
/// </summary>
/// <param name="script">MdxScript to update</param>
public void InsertMarkedCommands( MdxScript script ) {
InsertMarkedCommands( script, this.MdxCommands, Marker );
}
/// <summary>
/// Insert managed commands of a custom string collection
/// </summary>
/// <param name="script">MdxScript to update</param>
/// <param name="commands">Custom string collection of Mdx commands to insert</param>
public void InsertMarkedCommands( MdxScript script, IEnumerable<string> commands ) {
InsertMarkedCommands( script, commands, Marker );
}
/// <summary>
/// Insert managed commands of MdxCommands string collection using a custom Marker comment string
/// </summary>
/// <param name="script">MdxScript to update</param>
/// <param name="marker">Custom marker comment string</param>
public void InsertMarkedCommands( MdxScript script, string marker ) {
InsertMarkedCommands( script, this.MdxCommands, marker );
}
/// <summary>
/// Insert managed commands of a string collection using a custom Marker comment string
/// </summary>
/// <param name="script">MdxScript to update</param>
/// <param name="commands">Custom string collection of Mdx commands to insert</param>
/// <param name="marker">Custom marker comment string</param>
public static void InsertMarkedCommands( MdxScript script, IEnumerable<string> commands, string marker ) {
foreach( string mdxCommand in commands ) {
Command cmd = new Command();
cmd.Text = marker + mdxCommand;
script.Commands.Add( cmd );
}
}
#region IDisposable Members
public void Dispose() {
if (this.ServerConnection != null && _ownedServer) {
this.ServerConnection.Disconnect();
this.ServerConnection.Dispose();
}
// Write directly to private member, skip the property setter
this._serverConnection = null;
}
#endregion
}
public class MdxScriptUpdaterException : Exception {
public MdxScriptUpdaterException() : base() {}
public MdxScriptUpdaterException( string message ) : base( message ) {}
public MdxScriptUpdaterException( string message, Exception innerException ) : base( message, innerException ) {}
protected MdxScriptUpdaterException( SerializationInfo info, StreamingContext context ) : base( info, context ) {}
}
}
Program.cs的
using System;
using System.Collections.Generic;
using System.Text;
using SqlBi.Tools;
using System.IO;
namespace SqlBi.Tools {
class DemoMdxScriptUpdater {
static void Main( string[] args ) {
Demo();
}
static void Demo() {
MdxScriptUpdater updater = new MdxScriptUpdater("test");
string ScriptMdx = File.ReadAllText(@"D:\\ScriptMdx.txt");
//Console.WriteLine("--- Contents of file.txt: ---");
//Console.WriteLine(ScriptMdx);
updater.MdxCommands.Add(ScriptMdx);
updater.Update("BI", "BI1");
}
}
}
&#39; MdxScriptUpdater.vshost.exe&#39; (管理(v2.0.50727)):已加载 &#39; C:\的Windows \组件\ GAC_64 \ mscorlib程序\ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll中&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 &#39; Just My Code&#39;已启用。 &#39; MdxScriptUpdater.vshost.exe&#39; (管理 (v2.0.50727)):已加载 &#39; C:\的Windows \组件\ GAC_MSIL \ Microsoft.VisualStudio.HostingProcess.Utilities \ 10.0.0.0__b03f5f7f11d50a3a \ Microsoft.VisualStudio.HostingProcess.Utilities.dll&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 &#39; Just My Code&#39;已启用。 &#39; MdxScriptUpdater.vshost.exe&#39; (管理 (v2.0.50727)):已加载 &#39; C:\的Windows \组件\ GAC_MSIL \ System.Windows.Forms的\ 2.0.0.0__b77a5c561934e089 \ System.Windows.Forms.dll中&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 &#39; Just My Code&#39;已启用。 &#39; MdxScriptUpdater.vshost.exe&#39; (管理 (v2.0.50727)):已加载 &#39; C:\的Windows \组件\ GAC_MSIL \ SYSTEM \ 2.0.0.0__b77a5c561934e089 \ System.dll中&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 &#39; Just My Code&#39;已启用。 &#39; MdxScriptUpdater.vshost.exe&#39; (管理 (v2.0.50727)):已加载 &#39; C:\的Windows \组件\ GAC_MSIL \ System.Drawing中\ 2.0.0.0__b03f5f7f11d50a3a \ System.Drawing.dll程序&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 &#39; Just My Code&#39;已启用。 &#39; MdxScriptUpdater.vshost.exe&#39; (管理 (v2.0.50727)):已加载 &#39; C:\的Windows \组件\ GAC_MSIL \ Microsoft.VisualStudio.HostingProcess.Utilities.Sync \ 10.0.0.0__b03f5f7f11d50a3a \ Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 &#39; Just My Code&#39;已启用。 &#39; MdxScriptUpdater.vshost.exe&#39; (管理 (v2.0.50727)):已加载 &#39; C:\的Windows \组件\ GAC_MSIL \ Microsoft.VisualStudio.Debugger.Runtime \ 10.0.0.0__b03f5f7f11d50a3a \ Microsoft.VisualStudio.Debugger.Runtime.dll&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 &#39; Just My Code&#39;已启用。 &#39; MdxScriptUpdater.vshost.exe&#39; (管理 (v2.0.50727)):已加载 &#39; C:\ Users \用户桌面\ HaysDW \ 05.Tools \ MdxScriptUpdater \ BIN \调试\ MdxScriptUpdater.vshost.exe&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 &#39; Just My Code&#39;已启用。 &#39; MdxScriptUpdater.vshost.exe&#39; (管理 (v2.0.50727)):已加载 &#39; C:\的Windows \组件\ GAC_MSIL \ Microsoft.AnalysisServices \ 11.0.0.0__89845dcd8080cc91 \ Microsoft.AnalysisServices.dll&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 &#39; Just My Code&#39;已启用。 &#39; MdxScriptUpdater.vshost.exe&#39; (管理 (v2.0.50727)):已加载 &#39; C:\ Windows \ assembly \ GAC_MSIL \ Microsoft.AnalysisServices.AdomdClient \ 11.0.0.0__89845dcd8080cc91 \ Microsoft.AnalysisServices.AdomdClient.dll&#39;,跳过加载符号。模块已优化并具有调试器选项 &#39; Just My Code&#39;已启用。 &#39; MdxScriptUpdater.vshost.exe&#39; (管理 (v2.0.50727)):已加载 &#39; C:\的Windows \组件\ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089 \ System.Data.dll中&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 &#39; Just My Code&#39;已启用。 &#39; MdxScriptUpdater.vshost.exe&#39; (管理 (v2.0.50727)):已加载 &#39; C:\的Windows \组件\ GAC_MSIL \的System.Xml \ 2.0.0.0__b77a5c561934e089 \ system.xml.dll的&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 &#39; Just My Code&#39;已启用。线程&#39; vshost.NotifyLoad&#39; (0x5840)有 退出代码0(0x0)。线程&#39; vshost.LoadReference&#39; (0x7b2c) 已退出代码0(0x0)。 &#39; MdxScriptUpdater.vshost.exe&#39; (管理 (v2.0.50727)):已加载 &#39; C:\ Users \用户桌面\ HaysDW \ 05.Tools \ MdxScriptUpdater \ BIN \调试\ MdxScriptUpdater.exe&#39 ;, 符号已加载。 &#39; MdxScriptUpdater.vshost.exe&#39; (管理(v2.0.50727)): 加载 &#39; C:\的Windows \组件\ GAC_MSIL \ System.Configuration \ 2.0.0.0__b03f5f7f11d50a3a \ System.Configuration.dll&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 &#39; Just My Code&#39;已启用。线程&#39; vshost.RunParkingWindow&#39; (0x6e88)已退出代码0(0x0)。线程&#39;&#39; (0x4a9c)有 退出代码0(0x0)。该计划&#39; [4784] MdxScriptUpdater.vshost.exe:托管(v2.0.50727)&#39;退出了 代码0(0x0)。该程序&#39; [4784] MdxScriptUpdater.vshost.exe:程序 跟踪&#39;已退出代码0(0x0)。
答案 0 :(得分:7)
我要打一个平底船,而不是禁用“只是我的代码”&#39;在工具中以某种方式复选框 - &gt;选项 - &gt;调试器
答案 1 :(得分:0)
添加@ Alex的答案,
取消选中&#34;启用我的代码(仅管理)&#34;在工具 - &gt;选项 - &gt;调试 - &gt;一般选项可以做到这一点。请参阅this链接以了解其他选项。
答案 2 :(得分:0)
如果两者均无效,请尝试此操作;
通过选中工具&gt;调试&gt;符号中的复选框,将PDB文件加载到Microsoft Symbol Server。
此外,如果目录具有Cache的路径,则类似于:C:\ Users \ Machine \ AppData \ Local \ Temp \ SymbolCache 然后清空符号缓存并构建解决方案。
它适合我,试试你的。