6

我有一个项目作为第 3 方 .exe的包装器(它具有创建命令行和运行可执行文件的静态方法)。我想在我的解决方案中的至少几个项目中使用它。理想情况下,.exe 应该只在该包装项目中(我不想将它添加到使用它的每个项目中)。现在我正试图让它与在 IIS 7 上运行的 Web 项目(.NET MVC)一起工作,但是当我Assembly.GetExecutingAssembly().Location用来查看我的包装器被调用的目录时,我在一个文件夹中,比如

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\"我的项目"\65a016fb\ac5f20a7\assembly\dl3\d8de0f10\06e277a2_55b2cd01

我的第 3 方 .exe 无处可寻。是否可以使用未编译的引用复制文件?

顺便说一句,到目前为止,我已将 .exe 的“复制到输出目录”“构建操作”属性设置为“始终复制”“内容”/“资源”/“嵌入式资源”,但没有成功。

4

2 回答 2

1

尝试在使用包装器的项目中添加现有文件。出现对话框时,请执行以下操作:

http://wiki.oxygenelanguage.com/en-w/images/0/0d/AddAsLinkAero.png

要么,要么将必要的文件从包装中拖到您的项目中Alt

这会将文件添加为链接。当原始文件必须位于唯一的位置时,链接是重用的好选择。

将文件作为链接添加并设置到该链接构建操作Content以及Copy always将它们复制到输出目录的选项应该适合您。

于 2012-10-25T04:54:20.563 回答
0

如果有人遇到这个问题,我是这样解决的:

  • 将 .exe 添加到项目的资源中(右键单击项目,属性 -> 资源,添加文件并为其命名)
  • 您现在可以访问您的 .exe 作为byte[](至少如果您正在构建一个 dll)Properties.Resources.*NameYouGaveYourResource*
  • 在使用 .exe 之前,请使用File.Exists()检查文件是否存在Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)(或者您可以使用该方法将 exe 放在您想要的任何位置,上面会为您提供 .dll 所在的目录) - 如果不存在,请写出文件:

使用 (FileStream fileStream = new FileStream(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\EXE.exe", FileMode.CreateNew)) { fileStream.Write( Properties.Resources.NameYouGaveYourResource 0, > Properties.Resources .NameYouGaveYourResource .Length ); }

现在您可以轻松地将 exe 用作Process. 远非理想,但这意味着无论走到哪里,exe 都伴随着您的 .dll。

于 2012-11-01T04:05:51.637 回答