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/
コメント:
yVoC[UNLIMITȂ1~]
ECirŃ|C Yahoo yV LINEf[^[Ōz500~`I