如何在C#中的另一个项目引用时使用已编译的项目复制非代码文件

时间:2012-10-25 03:18:44

标签: c# asp.net-mvc visual-studio-2010 iis-7 metadata

我有一个项目充当第三方.exe 的包装器(它有静态方法来创建命令行并运行可执行文件)。我想在我的解决方案中的至少几个项目中使用它。理想情况下,.exe应该只在那个包装器项目中(我不想将它添加到每个使用它的项目中)。现在,我正在尝试使用在IIS 7上运行的Web项目(.NET MVC),但是当我使用Assembly.GetExecutingAssembly().Location查看我的包装器调用的目录时,我在一个像这样的文件夹中

  

C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET   文件\“我   项目“\ 65a016fb \ ac5f20a7 \组件\ DL3 \ d8de0f10 \ 06e277a2_55b2cd01

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

顺便说一句,我已将“复制到输出目录”“Build Action”属性设置为“始终复制”“内容”/“资源”/“嵌入资源”目前尚未成功。

2 个答案:

答案 0 :(得分:1)

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

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

或者将必要的文件从 Alt 包裹的项目中拖到你的项目中。

这会将文件添加为链接。只要原始文件必须位于唯一的位置,链接就是拒绝的好选择。

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

答案 1 :(得分:0)

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

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

using(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伴随着它。