問題タブ [setup-project]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - コンテンツ ファイルとプライマリ出力をプログラムで取得する
何らかの理由で、ベータ テスター用に、コンパイル済みアセンブリ、構成ファイル、およびその他のさまざまなファイルをネットワーク共有に XCOPY するためのバッチ ファイルを作成するスクリプトがあります。インストーラーはありますが、インストーラーを実行するために必要な権限を持っていないものや、Citrix で実行しているものがあります。
XCOPY と Citrix についての言及でデスク全体に嘔吐した場合は、それを言い訳にして早く家に帰りましょう。どういたしまして。
コードには現在、次のような数百の行があります。
以前は、そのファイル タイプを出力ディレクトリにコピーするかどうかを表す 20 個の int パラメータ (ファイル タイプごとに 1 つ) があり、さらに悪化していました。
これらの数百の行は、数千の XCOPY 行を含むアップロード/ダウンロード バッチ ファイルを作成します。セットアップ プロジェクトでは、「クライアントからのプライマリ出力」や「クライアントからのコンテンツ ファイル」などを参照できます。セットアップ以外のプロジェクトからプログラムでそれを実行できるようにしたいのですが、途方に暮れています。
明らかに、MS は、API を使用するか、.csproj ファイルを解析することによってそれを行います。どうすればこれを行うことができますか?セットアップ カテゴリのいずれかのファイルのリストを取得する方法を探しています。
- プライマリ出力
- ローカライズされたリソース
- コンテンツ ファイル
- ドキュメント ファイル
編集:私はハスが提案したようなセットアッププロジェクトを持っています。それは私が探しているものの途中です。それが完璧な解決策ではない唯一の問題は、複数のプロジェクトが同じアセンブリが独自のフォルダーにあることに依存しており、セットアップでファイルが一度しかコピーされないことです。
例:
プロジェクト Admin、Client、および Server はすべて ExceptionHandler.dll に依存し、Admin と Client は両方とも Util.dll に依存しますが、Server は依存しません。これは私が探しているものです:
- 管理者
- 管理者.exe
- Admin.exe.config
- ExceptionHandler.dll
- ユーティリティ.dll
- クライアント
- クライアント.exe
- Client.exe.config
- ExceptionHandler.dll
- ユーティリティ.dll
- サーバ
- サーバー.exe
- Server.exe.config
- ExceptionHandler.dll
参照されているアセンブリはすべて同じであるため、次のようになります。
- 管理者
- 管理者.exe
- Admin.exe.config
- ExceptionHandler.dll
- ユーティリティ.dll
- クライアント
- クライアント.exe
- Client.exe.config
- サーバ
- サーバー.exe
- Server.exe.config
これにより、クライアントまたはサーバーのいずれかが期待する 2 つの DLL のいずれかを見つけることができない場合、FileNotFoundException が発生します。
別のプロジェクトの出力で別の場所に複製されている場合でも、常に出力をコピーするようにするために欠落しているセットアップ プロパティはありますか?
EDIT AGAIN : 参照されるすべての DLL は「ローカルにコピー」に設定され、常に設定されています。NAnt と XSLT を使用してファイルのリストを取得することに関する適切な記事を見つけたので、neouser99 が提案したように、それも解決策になる可能性があります。
受け入れられた解決策: 私はほとんど出発点に戻っています。すべての .exe および .dll の出力は、セットアップ プロジェクトの "bin" ディレクトリに緩やかに圧縮されて配置されます。他のアプリケーションごとのフォルダーには、そのディレクトリ内の実行可能ファイルへのショートカットが含まれています。
ここでの違いは、カスタム アクションをインストーラーに追加してリフレクションを使用し、各実行可能出力の依存関係を列挙し、.exe ファイルと .dll ファイルを別のディレクトリにコピーすることです。いくつかのセットアップライブラリを介して含まれるファイルをプログラムで検出する方法があると思っていたので、少し面倒です。
.net - 参照アセンブリを正しく使用して、サンプルソースを配置する方法は?
いくつかのサンプルソースとともに、.NETクラスライブラリを開発しています。つまり、私のソリューションは、ライブラリ、ライブラリを説明するためのサンプルVB、およびすべてをデプロイするためのセットアッププロジェクトで構成されています。
サンプルには、クラスライブラリへのプロジェクトの依存関係があり、セットアッププロジェクトは、クラスライブラリ(つまり、.NETクラスライブラリプロジェクトからの出力)とVBアプリのソースを展開するように構成されています。
問題は、VBアプリのvbprojファイルにプロジェクトの依存関係が含まれていることです(つまり、クラスライブラリの.csprojを参照しています)。
私が達成しようとしているのは、ソースがクライアントマシンにデプロイされると、それは自己完結型のプロジェクトであり、(インストールされたばかりの)クラスライブラリDLLに依存するということです。
vbprojファイルのインストール後の操作を行う必要があると思いますが、これは初めてなので、この(私は思っていたでしょうが)一般的な問題は簡単に処理できるものかどうか疑問に思っていますか?
TIA
.net - Web セットアップ プロジェクト - 現在のマシン名の取得
マシン名を要求するカスタム画面を含む Web セットアップ プロジェクトがあります。このフィールドに現在のマシン名を事前入力する方法はありますか?
「Localhost」を含めるだけで必要な場合は、要件を満たしていません。
"Environment.MachineName" は、コード ブロック内でマシン名を返します。これは、カスタム アクションで必要な場合には問題ありません。しかし、カスタム アクションは、インストール ウィザードを通過するまで実行されないようです...そのため、実際には使用できません。とにかく、あなたの考えを教えてください。
visual-studio - アプリケーションのインストールパスを使用してVisualStudioセットアッププロジェクトのレジストリ値を作成するにはどうすればよいですか?
すべてのファイルのシェルメニュー(HKCR * \ shell)にアクションを追加する必要がある非常に単純なアプリケーションインストーラーがあり、レンガの壁に遭遇しました:アプリケーションのインストール済みパスをレジストリに挿入するにはどうすればよいですか?価値?私は私が考えることができるすべてを試しました:
[Path]
[ApplicationFolder]
[ApplicationPath]
[InstallPath]
[InstallRoot]
[InstallFolder]
[InstallTarget]
[TargetPath]
[Manufacturer]
ブラケット値の構文がレジストリで実際に機能することを確認するために、他の場所()で機能することがわかっているものを追加してみました(実際に機能します)。
誰か知っているか、少なくとも、私が試したことのないアイデアはありますか?
c# - VSセットアッププロジェクト:マージモジュールのファイルにスタートメニューリンクを追加
別のマージモジュールプロジェクトの出力を使用する新しいVisualStudioセットアッププロジェクトを作成しました。マージモジュールには、「x:\ programfiles\\Documentation」にインストールされるファイルが含まれています。これらのファイルの1つは「documentation.pdf」です。セットアッププロジェクトのスタートメニューへのリンクをドキュメントPDFに追加したいと思います。問題は、セットアッププロジェクトでは、セットアッププロジェクトに物理的に含まれていないファイルへの「ショートカットの作成」が許可されないことです。マージモジュールを調べたり、リンクしたりする方法がわかりません。
また、マージモジュールで名前が変更される一般的なスマートメニューの場所を作成する方法が見つからないようです。たとえば、「ModuleRetargetableFolder」内のすべてのファイルが「InstallationFolder」にリダイレクトされる場合があります。スタートメニューでも同じことをしたいと思います。
asp.net-mvc - MVC.netがWebセットアッププロジェクトからインストールされていることを確認する
MVC.netがターゲットマシンにインストールされていることをWebセットアッププロジェクトからチェックするエレガントな方法を知っている人はいますか?レジストリは最良の方法ですか?または、Windowsインストーラー検索ですか?
どうもありがとう、
c# - COM相互運用、分離、および重複する参照の除外
Microsoftが提供するCOMDLL(dsofile.dll)を、私たちが作成したC#dll(アセンブリA)で使用しています。COM dllを登録する必要をなくすために、dsofile.dllへの参照のIsolatedプロパティをtrueに切り替えました。
つまり、dllをコンパイルすると、Visual Studioはdsofile.dll、Interop.DSOfile.dll、およびネイティブマニフェストファイルをソリューションのbinフォルダーにコピーし、dsofile.dllを登録しなくてもアプリケーションを実行できます。
このアプローチは、小規模なテストアプリケーションで成功しました。
ただし、実際のアプリケーションでは、アセンブリAは他のいくつかのdll(アセンブリBおよびアセンブリC)とアプリケーションEXEによって参照されます。ネイティブマニフェストファイルと相互運用DLLがアプリケーションのbinフォルダーにコピーされると、最初のdllを参照する各dllが独自のコピーを作成するため、各ファイルの異なるコピーが使用されます。
これにより、セットアッププロジェクトで参照として表示されるファイルの複数のコピーが作成されます(つまり、アセンブリA、B、CおよびEXEフォルダーのdsofile.dll、アセンブリA、B、CおよびEXEフォルダーのInterop.DSOFile.dll、アセンブリA、B、CおよびEXEフォルダーからのNative.Assembly A.manifest)およびコンパイラー警告(「2つ以上のオブジェクトが同じターゲット位置を持っている」)。
さらに、最終フォルダーにコピーされたマニフェストおよび相互運用機能dllがアセンブリAフォルダーから直接取得されなかった場合(重複ファイルが相互に上書きするため)、アプリケーションはCOMDLLを正常にロードできません。
セットアップの依存関係からファイルの重複したコープを手動で除外することを余儀なくされましたが、ソリューションがリロードまたは再構築されると、それらは再表示されます。
誰かがCOMdllの分離された展開を達成するためのより良い方法を手伝うことができますか?可能であればマニフェストも埋め込みたいのですが、今のところうまくいっていません。
別の方法として、Visual Studio Automation用のEnvDTEを使用して重複コピーを除外するタスクの自動化を調査してきましたが、検出された依存関係ノードにアクセスしてそれらを識別および除外できる方法を見つけることができませんでした。UIHierarchyItemインターフェイスを使用してそれらにアクセスすると、セットアッププロジェクトの名前がすべてのファイルのnameプロパティとして表示され、除外オプションはありません。
何かアドバイスをいただければ幸いです。
sql-server - カスタム デスクトップ アプリケーション データベースを SQL Express にインストールする方法を教えてください。
ストレージにカスタム データベースを使用する WPF デスクトップ アプリケーションがあります。セットアップ プロジェクト (Visual Studio 2008 から) を準備する必要があります (フル セットアップ、ClickOnce ではありません)。
アプリケーションの前提条件のリストに を追加すると、アプリケーションのセットアップ中にインストールされます。
私の質問は、セットアップ中にスクリプトを実行して、アプリケーションが必要とするデータベースを作成するにはどうすればよいですか? または、セットアップ中にデータベースをクライアント マシンに復元するにはどうすればよいですか?
関連するもう 1 つの質問ですが、クライアント マシンに既に存在する場合はどうなりますか? インスタンス名と接続データを検出する方法は? そして、必要に応じて、エンティティフレームワークがそのデータベースに接続するために使用する接続文字列を変更するにはどうすればよいですか?
ありがとう、エド
visual-studio - セットアッププロジェクトのビルド時に「検証中にエラーが発生しました。HRESULT='80004005'」と表示されるのはなぜですか?
セットアッププロジェクトをビルドするときに次のエラーが発生するのはなぜですか?
検証中にエラーが発生しました。HRESULT = '80004005'