Visual Studio?
MSDNに書いている通りだと、うまく削除できない。 http://msdn.microsoft.com/ja-jp/library/ms228765.aspx
「BMP」フォーマットの16*16サイズの写真のみサポートする。
参照URL:
http://msdn.microsoft.com/ja-jp/library/ms228771.aspx
開発中のアドインプロジェクトフォルダを移動すると、アドインデバッグする際に、エラーとなる場合があります。
この問題に対して、プロジェクト内の「ServiceAddin - For Testing.AddIn」ファイルを開いて、下記の所に、
<Assembly>C:\Users\XXX\Desktop\ServiceAddin\bin\ServiceAddin.dll</Assembly>
移動した場所を新しく指定したら、治れます。
コンパイルする際に、ObjフォルダのXX.dllファイルはほかのプロセスによって、使用されてコンパイルできない場合、 他に起動しているVisual Studio 全部閉じたら、治れます。
クラスライブラリの出力タイプと認識され、デバッグ出来ない現象の場合、下記のように設定すれば
プロジェクトのプロパティの「デバッグ」タグの中に
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe
/resetaddin MyAddin1.Connectもしアドインプロジェクトの名前空間が変更されたら、ここ修正する必要があります。
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\この設定はアドインの実行パスとなります。
参照URL:
http://msdn.microsoft.com/ja-jp/library/1326zbk3(VS.80).aspx
%ALLUSERSPROFILE%
C:\Documents and Settings\All Users\Application Data\Microsoft\MSEnvShared\Addins
%APPDATA%
C:\Documents and Settings\<username>\Application Data\Microsoft\MSEnvShared\Addins
%USERPROFILE%
C:\Documents and Settings\<username>\My Documents\Visual Studio 2005\Addins
%VSAPPDATA%
C:\Documents and Settings\<username>\Addins
%VSCOMMONAPPDATA%
C:\Documents and Settings\All Users\Addins
using VSLangProj;7.033バージョンでよい //名前空間の取得 VSProject vsproject_ = (VSProject)project.Object; MessageBox.Show(vsproject_.Project.Properties.Item("RootNamespace").Value.ToString());
下記のサンプルコードは、ソリューションエクスプローラの中にフォルダに対して、メニューにアドインを追加するサンプルです。
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; if (connectMode == ext_ConnectMode.ext_cm_Startup || connectMode == Extensibility.ext_ConnectMode.ext_cm_Startup) { object[] contextGUIDS = new object[] { }; Commands2 commands = (Commands2)_applicationObject.Commands; try { CommandBar projBar = ((CommandBars)_applicationObject.CommandBars)["Folder"]; //コマンド コレクションにコマンドを追加します: Command command = commands.AddNamedCommand2(_addInInstance, "ServiceAddin", "ServiceAddin", "Executes the command for ServiceAddin", true, 60, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported + (int)vsCommandStatus.vsCommandStatusEnabled, (int)vsCommandStyle.vsCommandStylePictAndText, vsCommandControlType.vsCommandControlTypeButton); command.AddControl(projBar, 1); } catch (System.ArgumentException ex) { //同じ名前のコマンドが既に存在しているため、例外が発生した可能性があります。 // その場合、コマンドを再作成する必要はありません。 例外を // 無視しても安全です。 //System.Windows.Forms.MessageBox.Show("ArgumentException : " + ex.Message + ex.StackTrace); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show("Exception : " + ex.Message + ex.StackTrace); } }
下記の「Folder」キーの指定によって、プロジェクトの中にフォルダの右クリックメニューにアドイン追加することが可能となる。
CommandBar projBar = ((CommandBars)_applicationObject.CommandBars)["Folder"];
ソリューションアイコンの右クリックメニューに追加する場合、「Solution」と指定する。
プロジェクト直下の各ファイルの右クリックメニューに追加する場合、「Item」と指定する。
ソリューションフォルダアイコンの右クリックメニューに追加する場合、「Solution Folder」と指定する。
ソースコード編集するWindowsの上に右クリックメニューに「競合の解決」のサブメニュー追加する場合、「Resolve」と指定する。
ソリューションとプロジェクトのエクスプローラのプロジェクトの上で右クリックして、出たメニューをカスタマイズするのは、特別な手段がいります。
プロジェクトアイテムの上に右クリックで出たメニューにアドインを追加の処理方法が以上と違います。
Visual Sutdio では、「Project」と命名したコマンドバーは一つではありませんので。
//ボタンを保持するList(理由がわかりませんが、CommandBarButtonはほかのインスタンスで保持しないと、Clickイベントが動かないなので。)
private readonly IList<CommandBarButton> _allocatedButtons; _allocatedButtons = new List<CommandBarButton>(); //今コマンドバーの中にProjectと命名したコマンドバーすべてを検索する、名前があっているなら、アドインを追加する形に。 foreach (CommandBar bar in (CommandBars)_applicationObject.CommandBars) { if (bar.Name.Equals("Project")) { CommandBarButton button = (CommandBarButton)bar.Controls.Add(MsoControlType.msoControlButton, Type.Missing, Type.Missing, 1, true); button.Caption = "SampleAddin"; button.OnAction = "'button_ClickOnAction'"; button.Click += new _CommandBarButtonEvents_ClickEventHandler(button_Click); _allocatedButtons.Add(button); } } void button_Click(CommandBarButton Ctrl, ref bool CancelDefault) { System.Windows.Forms.MessageBox.Show("***"); }
アドインプロジェクトの「Connect」クラスの中に、「QueryStatus」と「Exec」メソッドがあります。
この二つのメソッドの中に、下記のようなコマンドを判断するStatmentがあります。
if (commandName == "KHI.Tool.ServiceAgentCreator.Connect.ServiceAgentCreator") { //.... }
ここの commandName のフォーマットは「名前空間+クラス名+追加したコマンドの名前」となります。
名前空間変更された場合とコマンドの名前を変更された場合、必ずここの二箇所を修正してください。
ボタンを配置すると自動的にFormの抽象クラスにメソッドが生成される (partial だったらいけるのか..?)
この動作では、VSのアドインで、できないと思います。検証として、VSのアドインとマクロは同じの感じなものですので、マクロができ
ないことは、アドインのほうが多分もできません。(もしかしたら、できるかもしれませんが、相当難しいことになると思っております。)
ボタンを配置すると自動的にFormの抽象クラスにメソッドが生成されるマクロとアドインは、ソースコードファイルに対して、触ることができませ~
ん。まだ、CodeDomを利用しても、Formの抽象クラスにメソッドが生成するのが無理と思っております。現在抽象クラスの情報を読み込めませんので。
一つ案として、(結構無理やりなやり方)
ボタンのラッパークラスを作成し、InitLayout メソッドをオーバーライトして、ボタンが配置されたら、アドインでプロジェクトにボタンの関連 partial
アイテムを追加することが可能です、CodeDomを利用すると、ソースコードの中身もカスタマイズできますが、この方法だと、実行するたびに、このメソッドが
実行され、パフォマンス上では、よろしくないでしょう。もしかしたら、開発中では、この方法でやっていて、テスト、リリースする際に、このラッパークラス
の中に、partial アイテムを追加する部分を外しますとか、
参考したURL http://clr.mucleus.jp/003/001.html
EnvDteとVsLangProj同時に参照する際に「EnvDTEを読み込めない」コンパイルエラーが発生するために、
ソリューションの Entry プロジェクトに以下の設定を追加します。
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="EnvDTE" publicKeyToken="b03f5f7f11d50a3a"/> <bindingRedirect oldVersion="7.0.3300.0" newVersion="8.0.0.0"/> </dependentAssembly> </assemblyBinding> </runtime>
参考したURL http://msdn.microsoft.com/ja-jp/library/ms228768.aspx
下記のソースコードを利用して、指定されているファイルをプロジェクトへ追加することですが
Project project = null; SelectedItem selectItem = _applicationObject.Application.SelectedItems.Item(1); project = selectItem.ProjectItem.ProjectItems.ContainingProject; //追加するファイルのフルパス string generateFileName = "...."; project.ProjectItems.AddFromFile(generateFileName);
ここの generateFileName 変数の中に @"C:\tmp\test\..\xxx.cs" みたいな途中に".."を入れて、親パスを指定するのはダメ。
StreamWriter writer = new StreamWriter(@"C:\tmp\property.csv", false, System.Text.Encoding.GetEncoding("Shift_JIS")); string contents = ""; try { MessageBox.Show(project.Properties.Count.ToString ()); for (int i = 1; i < project.Properties.Count; i++) { try { if (project.Properties.Item(i) != null) { if (project.Properties.Item(i).Value != null) { contents += "Name : " + project.Properties.Item(i).Name + ",Value : " + project.Properties.Item(i).Value.ToString() + "\r\n"; } } } catch { //理由がわからない、ここでよく未知な例外は発生する } } } finally { writer.Write(contents); writer.Close(); }
Sub TemporaryMacro() DTE.ActiveWindow.Object.GetItem("WCFSampleClient\WCFSampleCommunication\Service References").UIHierarchyItems.Expanded = True DTE.ActiveWindow.Object.GetItem("WCFSampleClient\WCFSampleCommunication\Service References\Proxy\Reference.svcmap\Reference.cs").Select(vsUISelectionType.vsUISelectionTypeSelect) DTE.ActiveWindow.Object.DoDefaultAction DTE.Windows.Item("Reference.cs").Activate DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate DTE.ActiveWindow.Object.GetItem("WCFSampleClient\WCFSampleCommunication\Service References\Proxy\service.wsdl").Select(vsUISelectionType.vsUISelectionTypeSelect) DTE.Windows.Item("Reference.cs").Activate DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate DTE.ActiveWindow.Object.GetItem("WCFSampleClient\WCFSapmpleClient\app.config").Select(vsUISelectionType.vsUISelectionTypeSelect) DTE.ActiveWindow.Object.DoDefaultAction DTE.Windows.Item("app.config").Activate DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate DTE.ActiveWindow.Object.GetItem("WCFSampleClient\WCFSampleCommunication\Service References\Proxy").Select(vsUISelectionType.vsUISelectionTypeSelect) DTE.ActiveWindow.Object.GetItem("WCFSampleClient\WCFSampleCommunication\Service References").Select(vsUISelectionType.vsUISelectionTypeSelect) DTE.ActiveWindow.Object.GetItem("WCFSampleClient\WCFSampleCommunication\Service References\Proxy").Select(vsUISelectionType.vsUISelectionTypeSelect) DTE.ExecuteCommand ("Project.UpdateServiceReference") End Sub
Sub TemporaryMacro() DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate DTE.ActiveWindow.Object.GetItem("WindowsFormsApplication1\WindowsFormsApplication1\CustomControl1.bmp").Select(vsUISelectionType.vsUISelectionTypeSelect) DTE.ExecuteCommand ("Edit.Delete") DTE.ActiveWindow.Object.GetItem("WindowsFormsApplication1\WindowsFormsApplication1\CustomControl1.css").Select(vsUISelectionType.vsUISelectionTypeSelect) DTE.ExecuteCommand ("Edit.Delete") End Sub
Sub TemporaryMacro() DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate DTE.ActiveWindow.Object.GetItem("KHI全体ビルド用\Service\KHI.ServiceAgent\Service References\KhiServiceReference\Arrays.xsd").Select(vsUISelectionType.vsUISelectionTypeSelect) DTE.ActiveWindow.Object.GetItem("KHI全体ビルド用\Service\KHI.ServiceAgent\app.config").Select(vsUISelectionType.vsUISelectionTypeSelect) DTE.ActiveWindow.Object.DoDefaultAction DTE.Windows.Item("app.config").Activate DTE.ActiveDocument.Selection.SelectAll DTE.ActiveDocument.Selection.Delete DTE.ActiveDocument.Save End Sub
Sub TemporaryMacro() DTE.ActiveWindow.Object.GetItem("KHI全体ビルド用\Service\KHI.ServiceAgent\IKhiServiceAgent.cs").Select(vsUISelectionType.vsUISelectionTypeSelect) DTE.ExecuteCommand ("ClassViewContextMenus.ClassViewProject.TfsContextUndoCheckout") DTE.ActiveWindow.Object.GetItem("KHI全体ビルド用\Service\KHI.ServiceAgent\IKhiServiceAgent.cs").Select(vsUISelectionType.vsUISelectionTypeSelect) DTE.Windows.Item("KhiServiceAgentStub.cs").Activate DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate DTE.ActiveWindow.Object.GetItem("KHI全体ビルド用\Service\KHI.ServiceAgent\IKhiServiceAgent.cs").Select(vsUISelectionType.vsUISelectionTypeSelect) DTE.ExecuteCommand ("ClassViewContextMenus.ClassViewProject.TfsContextCheckOutForEdit") DTE.Windows.Item("{131369F2-062D-44A2-8671-91FF31EFB4F4}").Activate 'チーム エクスプローラ DTE.ActiveWindow.Object.GetItem("172.30.117.188\SysrdcTeamProject\ソース管理").Select(vsUISelectionType.vsUISelectionTypeSelect) DTE.ActiveWindow.Object.DoDefaultAction DTE.Windows.Item("{99B8FA2F-AB90-4F57-9C32-949F146F1914}").Activate 'ソース管理エクスプローラ DTE.ExecuteCommand ("File.TfsUndoCheckout") DTE.Windows.Item("KhiServiceAgentStub.cs").Activate DTE.ExecuteCommand ("File.TfsUndoCheckout") DTE.Windows.Item("KhiServiceAgent.cs [読み取り専用]").Activate DTE.Windows.Item("{99B8FA2F-AB90-4F57-9C32-949F146F1914}").Activate 'ソース管理エクスプローラ DTE.ExecuteCommand ("File.TfsCheckOut") End Sub
//VSProject vsproject_ = (VSProject)project.Object; //MessageBox.Show(vsproject_.Project.Properties.Item("RootNamespace").Value.ToString());
(1)在OnConnection中,判断connectMode时,一定要加上ext_cm_AfterStartup
if(connectMode == Extensibility.ext_ConnectMode.ext_cm_UISetup || connectMode == Extensibility.ext_ConnectMode.ext_cm_Startup || connectMode == Extensibility.ext_ConnectMode.ext_cm_AfterStartup) // this line will work when u choose addin in addin manager
这样子,在vs的Addin Manager中选中插件时,插件才会重新显示出来,一般的范例中,只有前$N个判断
(2)QueryState中,设置state时,要使用下面语句
if( 是`O加入的command ) { if( 满足显示的条件 ) status = (vsCommandStatus)vsCommandStatus.vsCommandStatusSupported|vsCommandStatus.vsCommandStatusEnabled; else status = (vsCommandStatus)vsCommandStatus.vsCommandStatusSupported; } else status = (vsCommandStatus)vsCommandStatus.vsCommandStatusUnsupported;
这样做,才能在条件不满足时,插件的菜单变灰
(3)判断代码窗口存在的方法是
(applicationObject.ActiveWindow != null) && (applicationObject.ActiveWindow.Type == vsWindowType.vsWindowTypeDocument)
就是说当前有活动窗口,而且其类型是文档类型
(4)在文档窗口插入字符的方法是
TextSelection ts = (TextSelection)applicationObject.ActiveDocument.Selection; EditPoint ep = ts.ActivePoint.CreateEditPoint(); ep.Insert(strCode);
当然,还可以调用EditPoint的其它方法,来实现删除,替换等等
コピーするファイルはbin/Debugフォルダからみる相対パス
[DeploymentItem(@"..\..\DeploymentItem\Message\Message.resources", @"Message")]
このようにテストメソッドに指定をすると、TMessage.resourcesが
C:\\solution\TestResults\user_machine yyyy-mm-dd hh_mm_ss\Out\Message\Message.resources
と準備されます。
http://msdn.microsoft.com/ja-jp/library/ms182534(VS.80).aspx
private として宣言するメソッドのテストはしなくてもいいだが、Internal のほうが場合によって、テストする必要が場合もあります。例えば、ある Internal は自己担当外とか、基本的にテストしなくてもよい。
Net.tcp バインディングのメタデータを取得する際に、下記のエラーが出る場合、
{"受信メッセージの最大メッセージ サイズ クォータ (65536) を超えました。このクォータを増やすには、適切なバインド要素の MaxReceivedMessageSize プロパティを使用してください。"}
//受信メッセージの最大メッセージ サイズ を設定する。 TcpTransportBindingElement tcpBindingElement =new TcpTransportBindingElement(); tcpBindingElement.MaxReceivedMessageSize *= 5; CustomBinding binding = new CustomBinding(tcpBindingElement); client = new MetadataExchangeClient(binding); client.MaximumResolvedReferences = 6553500; client.OperationTimeout = DateTime.Now.AddSeconds(60) - DateTime.Now ; client.ResolveMetadataReferences = true; resultMetaData = client.GetMetadata(address,MetadataExchangeClientMode.MetadataExchange );
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/7e723844-d219-45af-9714-4b860988c402/
コメント: